方法:双指针
- 首先分别定义两个指针 fast 和 slow 代表数组元素的下标,两指针起始位置相同;
- 遍历数组,找到数组中与目标值 val 相等的值;
- 当 fast 对应元素等于目标值 val 时,执行: fast++, slow不动,继续进行判断;
- 当 fast 对应元素不等于目标值 val 时,将 fast 的对应值赋给 slow ,再将 slow与 fast 同时自加,再继续比较

- 最后, fast 访问越界,即超出数组长度时,遍历结束,返回 slow 即可。
代码:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
/*int n=0;
for(int num:nums){
if(num!=val){
nums[n]=num;
n++;
}
}
return n;*/
//快慢指针
if(nums.size()==0)return 0;
int fast=0;
int slow=0;
while(fast<nums.size()){
if(nums[fast]!=val){
nums[slow]=nums[fast];
slow++;
}
fast++;
}
return slow;
}
};