class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int n = nums.size();
int slowIndex = 0;
for(int fastIndex = 0; fastIndex < n; ++fastIndex){
if(val != nums[fastIndex]){
nums[slowIndex++] = nums[fastIndex];
}
}
return slowIndex;
}
};
代码(二刷自解 2024年4月15日 4min)
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
//双指针,发现相同就和最后一个元素互换
int left = 0, right = nums.size() - 1;
//必须 <= ,才可以避免整个数组都是val的情况
while (left <= right) {
if (nums[left] == val) {
while (nums[right] == val && left <right) right--;
swap(nums[left], nums[right--]);
}
left++;
}
return right + 1;
}
};
代码(三刷自解 2024年5月4日 3min bugfree)
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
// 双指针,right != val 就赋给left
int left = 0, right = 0;
for (;right < nums.size(); right++) {
if (nums[right] == val) {
continue;
}
nums[left++] = nums[right];
}
return left;
}
};