可以使用双指针:右指针right 指向当前将要处理的元素,左指针left 指向下一个将要赋值的位置。
如果右指针指向的元素不等于val,它一定是输出数组的一个元素,我们就将右指针指向的元素复制到左指针位置,然后将左右指针同时右移;
如果右指针指向的元素等于val,它不能在输出数组里,此时左指针不动,右指针右移一位。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int left = 0;
for(int right = 0;right < nums.size();right++)
{
/*若右指针的元素不等于目标值,则将右指针的元素赋给左指针的元素*/
if(nums[right] != val)
{
nums[left] = nums[right];
left ++;//并且将左右指针都后移一位。
}
// 否则,就将右指针后移一位
}
return left;
}
};