目录
思路梳理:在一个数组之中存在与val相同的元素,此时需要将其他相同的val给消除掉,那么我们可以使用一种方法来将他们覆盖,下面是具体思路。
1、先定义一个数组:,在定义两个下标(哨兵作用),此处的下标是为了后面更好地覆盖数组中重复元素的哨兵。
4、此时我们看到覆盖之后的结果:此时src又和dest重叠在一起,此时nums[src] != val,那就继续执行操作步骤2,让他两继续前进....
5、直到.....此时Nums[src] == val的时候,我们需要让src++,dest不动,
6、直到src++到数组的尽头,直到他发现自己已经跳出这个数组的长度范畴,此时就跳出循环,直接返回dest,我们最终获得的数组那不就是[1,3,3,5,2],是不是消除了其他与2重复的元素了呢?
题目描述:
思路梳理:在一个数组之中存在与val相同的元素,此时需要将其他相同的val给消除掉,那么我们可以使用一种方法来将他们覆盖,下面是具体思路。
需求:消除数组中其他重复的2
1、先定义一个数组:,在定义两个下标(哨兵作用),此处的下标是为了后面更好地覆盖数组中重复元素的哨兵。
2、我们看见src和dest指向的位置都是最初的位置下标为0,那么src和dest所指向的并不是我们需要消除的元素,那就让nums[dest] = nums[src] (此处的赋值覆盖就是为了后面更方便的覆盖重复元素,记住这个操作,当src和dest每一次指向的元素都不是目标元素val = 2的时候,就操作一次) ,再让src++,dest++。
3、此时我们发现src和dest指向的元素都是我们的目标元素2,我们此时想要覆盖这里出现的元素2,我们让src++,dest不变,为了就是然src继续往后面走,走到一个nums[src] != val的时候,再去直接覆盖它之前的dest的位置,这样大大节省了我们的覆盖效率,此时nums[src] != val,那么此时我们就可以重复第2个步骤的操作,nums[dest] = nums[src] , dest++ , src++;
4、此时我们看到覆盖之后的结果:此时src又和dest重叠在一起,此时nums[src] != val,那就继续执行操作步骤2,让他两继续前进....
5、直到.....此时Nums[src] == val的时候,我们需要让src++,dest不动,
6、直到src++到数组的尽头,直到他发现自己已经跳出这个数组的长度范畴,此时就跳出循环,直接返回dest,我们最终获得的数组那不就是[1,3,3,5,2],是不是消除了其他与2重复的元素了呢?
代码实现如下:
int removeElement(int* nums, int numsSize, int val){
int src = 0;
int dest = 0;
while(src < numsSize){
if(nums[src] != val){
nums[dest] = nums[src];
dest++;
src++;
}else{
src++;
}
}
return dest;
}
好了,本期就分享到这里,更多的知识干货关注我!带你刷爆leetcode,勇闯天涯!