题目要求把数组里等于某数的项都删掉。注意题目里说数组里的数字顺序可以变化。
当要删掉的数字在原数组里很少的时候,如何保证写入次数最少?我们保留两个指针(或iterator)i和j,i指向当前可以覆盖的位置,即要删掉的数所在位置;j指向当前从末尾开始第一个非需要删掉的数字的位置,每次交换i和j的内容即可。
int removeElement(vector<int>& nums, int val) {
if(nums.size() == 0)
return 0;
auto i = nums.begin();
auto j = nums.end() - 1;
while(j != i && *j == val) j--;
if(*j == val) return 0;
else if(i == j) return 1;
while(i < j) {
while(i < j && *i != val) i++;
swap(*i, *j);
i++;
while(i < j && *j == val) j--;
}
while(i != nums.end() && *i != val) i++;
return i - nums.begin();
}