原题地址(简单)
方法1—两侧双指针
思路
这个应该是最快的解,同时也是官解的方法二。
由于此题很简单,不再解析。
代码
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int len = nums.size();
if(len == 0) return 0;
int l = 0, r = len - 1;
while(l < r) {
while(r > l && nums[r] == val) r--;
while(l < r && nums[l] != val) l++;
swap(nums[l], nums[r]);
}
for(int i=0; i<len; i++)
if(nums[i] == val) return i;
return len;
}
};
官解:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int left = 0, right = nums.size();
while (left < right) {
if (nums[left] == val) {
nums[left] = nums[right - 1];
right--;
} else {
left++;
}
}
return left;
}
};
方法2—同侧双指针
思路
官解方法1