class Solution{
public:
int removeElement(vector<int>& nums, int val){
int n = nums.size();
int k = 0;
for(int i = 0; i < n; i++){
if(nums[i] == val){
for(int j = i+1; j < n; j++){ //把后面的都往前移
nums[j-1] = nums[j];
}
i--; //所有元素往前移1位,i应该保持不变。因为for中i++,所以要--才保持不变
n--; //待排序的size会减少1位
}
else
k++;
}
return k;
}
};
另解2(双指针):slow指针指向新数组的下标,fast用来遍历旧数组
时间复杂度:O(n)
空间复杂度:O(1)
class Solution{
public:
int removeElement(vector<int>& nums, int val) {
int slow = 0;
int fast = 0;
int n = nums.size();
for( ; fast < n; fast++){
if(nums[fast] != val){
nums[slow] = nums[fast];
slow++;
}
}
return slow;
}
};