- 第一种解法,暴力解法,使用两个for循环一个进行遍历,一个进行覆盖,代码如下:
cpp
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int size = nums.size();
for(int i =0; i < size; i++){
if(nums[i] == val){
for(int j=i+1; j < size; j++){
nums[j-1] = nums[j];
}
i--;
size--;
}
}
return size;
}
};
- 第二种解法,双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
- 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
- 慢指针:指向更新 新数组下标的位置
代码如下:
cpp
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int size = nums.size();
int slowindex = 0;
int fastindex = 0;
for(fastindex; fastindex < size; fastindex++){
if(nums[fastindex] != val){
nums[slowindex++] = nums[fastindex];
}
}
return slowindex;
}
};