移除数组中的元素 只能用后面的数据覆盖前面
方法一: 暴力解法:
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
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--;//如果是两个连续的val 133 删除后当前第i个元素还是val,但此时i已经完成本次循环了 下次会从i+1开始,当前第i
//个元素就漏掉了
size--; // 此时数组的大小-1
}
}
for (int i = 0; i < size; i++)
cout << nums[i]<<endl; //自己检验用的答题时可以不写
return size;
}
int main() {
vector<int>v = { 1,3,3,3,2,7 };
cout<< removeElement(v, 3);
system("pause");
return 0;
}
方法二:双指针法:
- 快指针:遍历整个数组,寻找不为target的元素,并将其复制给慢指针
- 慢指针:不包含target的新数组
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
int removeElement(vector<int>& nums, int val) {
int fast = 0, slow = 0;
for (fast = 0; fast < nums.size(); fast++) {
if (nums[fast] != val) {
nums[slow] = nums[fast];
slow++;
}
}
return slow;
}
int main() {
vector<int>v = { 1,3,3,3,2,7 };
cout<< removeElement(v, 3);
system("pause");
return 0;
}