将指定值的元素移动到最后,并返回修改后数组的size。元素可以无序
不知道为啥时间复杂度堪忧。代码确实复杂了点,也可能是题目的要求没看懂
//27. Remove Element
int removeElement(vector<int>& nums, int val) {
int lastPos = 0; // 最后一个可以交换位置 距离最后一个的距离,初始为0
int len = 0;
int sz = nums.size();
if (sz == 0)
return 0;
for (int i = 0; i < sz - lastPos; ++i)
{
if (nums[i] == val )
{
int swapPos = sz - lastPos - 1;
for (int j = swapPos; j > 0; --j)
{
if (nums[j] != val)
{
break;
}
else
{
swapPos--;
}
}
if (swapPos <= i)
return len; // 如果计算的交换的位置 在当前遍历的位置之前,说明整个遍历已经结束,直接返回
int temp = nums[swapPos];
nums[swapPos] = nums[i];
nums[i] = temp;
lastPos = sz - swapPos;
len++;
}
else
{
len++;
}
}
return len;
}