class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int leftIdx = 0;
int rightIdx = nums.size()-1;
while (leftIdx <= rightIdx){
while (leftIdx <= rightIdx && nums[leftIdx] != val){
leftIdx++;
}
while (leftIdx <= rightIdx&& nums[rightIdx] == val){
rightIdx--;
}
if (leftIdx < rightIdx)
nums[leftIdx++] = nums[rightIdx--];
}
return leftIdx;
}
};
两个需要注意的点:
1)while (leftIdx < nums.size() && nums[leftIdx++] != val);
不能这样写,因为如果当前的!=val,也会向前移动一个
2)以及不能写leftIdx < nums.size()。
因为很可能rightIdx后面的数字还有val,但是右边的指针已经移动到前面去了。