方法1:
从头开始遍历,每次遇到指定元素,就从数组末端取元素将其覆盖。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int len = nums.size();
for (int i = 0; i < len; i++) {
if (nums[i] == val) {
len--;
while (len > i && nums[len] == val) {
len--;
}
nums[i] = nums[len];
}
}
return len;
}
};
方法2:
快慢指针
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slow = 0;
int fast = -1;
for (int i = 0; i < nums.size(); i++) {
fast++;
if (nums[fast] != val) {
nums[slow++] = nums[fast];
}
}
return slow;
}
};