搭配使用更佳哦~~
前面学了顺序表的相关知识,我们来尝试做一下关于顺序表的经典算法题~
前言
移除元素作为力扣上的一道不算太难的算法题,很适合刚学过顺序表的我们拿来练手,大家也可以去力扣上自己 try 一下~
一.思路
我们先来理解一下题干:假设我们有一个这样的数组 nums:
nums
假设 val = 3 ,那我们需要将 nums 中的 3 全部移除,于是我们数组元素 4 - > 2 ,这就是题干大致的意思,理解了题干后我们开始求解。
1)临时数组
我们首先可以想到最简单的方法就是,创建一个新的数组,遍历原数组,将不为 val 的值放入新数组。
但由于题干中的限定条件:
这个方法只能pass掉。
2) 双指针
我们创建两个指针:
src:源数据
dst:目标指针
我们假设还是这个数组元素,使用 src 这个指针开始遍历,如果元素是 val (也就是要删除的数据)就往后面的元素去遍历,当指向不是 val 的元素时,我们就把 src 指向的元素给给 dst ,然后 dst 自身 ++ ,向后面元素走一位, src ++。依次往后遍历 ,最终 src 跳出数组,dst 刚刚好等于2,就是我们想要得到的新数组。
我们可以总结一下双指针的思路了:
创建两个指针变量 src , dst
- 若 src 指向的值为 val,则 src++
- 若 src 指向的值不为 val ,nums [ dst ] = nums [ src ],src ++,dst ++
二.代码实现
cpp
int removeElement(int* nums, int numsSize, int val) {
//先创建两个变量
int src, dst;
src = dst = 0;
while (src < numsSize)
{
if (num[src] == val)
{
src++;
}
else {
//赋值,两指针
nums[dst] = nums[src];
dst++;
src++;
}
}
//此时刚好dst是我们需要的新数组有效长度
return dst;
}
下一篇会接着将另一道有关顺序表的算法题~~
🎈🎈完结撒花🎈🎈