注意vector中删除的用法nums.erase(nums.begin()+i)
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
if(0==nums.size())
return 0;
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();)
{
if(nums[i]<val)
i++;
else if(val==nums[i])
nums.erase(nums.begin()+i);
else
break;
}
return nums.size();
}
};
int main()
{
vector<int>number;
int N,x;
cin>>N;
for(int i=0;i<N;i++)
{
cin>>x;
number.push_back(x);
}
int result;
Solution solve;
int target;
cin>>target;
result=solve.removeElement(number,target);
cout<<result<<endl;
for(i=0;i<number.size();i++)
cout<<number[i]<<' ';
return 0;
}
第二种方法:双指针维护
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int j=0;
for(int i=0;i<nums.size();i++)
{
if(nums[i]!=val)
nums[j++]=nums[i];
}
return j;
}
};
第三种方法;
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
for(int i=0;i<nums.size();)
{
if(val==nums[i])
nums.erase(nums.begin()+i);
else
i++;
}
return nums.size();
}
};