题目要求原地移除相同元素,所以我们不能开辟一个新的数组存符合要求的数据,那么我们直接用原数组保存。对此我们可以设定两个指针: slow 和 fast,初始化为0,fast累加,用nums[fast]和 val 比较,如果不等于 val 即符合题目要求,nums[slow] 存储 该数据 ,且slow++, 如果等于则 slow不变 ,fast++, 直到fast = numsSIze结束循环,最后slow的值即为要求的数组长度值。
代码如下:
int removeElement(int* nums, int numsSize, int val) {
int slow = 0;
int fast = 0;
while(fast<numsSize){
if(nums[fast] != val){
nums[slow] = nums[fast];
fast++;
slow++;
}else{
fast++;
}
}
return slow;
}