数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖
1、暴力解法
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int n = nums.size();
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--;
n--;
}
}
return n;
}
};
2、双指针法
思想:通过一个快指针和一个慢指针在一个for循环下完成两个for循环的工作
快指针:寻找新数组的元素,新数组就是不含有目标元素的数组
慢指针:指向更新新数组下标的位置
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slowIndex = 0;
for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++) {
if (val != nums[fastIndex]) {
nums[slowIndex++] = nums[fastIndex];
}
}
return slowIndex;
}
};
3、库函数
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
for (int i = 0; i < nums.size(); i++) {
if (val == nums[i]) {
nums.erase(nums.begin()+i);
i--;
}
}
return nums.size();
}
};