直接用vector的迭代器和erase函数来实现了,不过要注意的是,erase函数实现的细节如下:
1.删除单个元素前后,迭代器的指向都是不变的,而将该元素删除之后,所删除元素后边的元素会全部向前复制一个元素位置
2.删除一段段元素之后,后面的元素(从iter_end开始到vector.end())会被复制到被删除元素段开始的地方(iter_begin开始),而vector.end()也根据删除的元素个数往前移动
所以,在删除完一个元素后,就相当于自动移向了下一个元素了(迭代器指向不变,但向后一个元素复制了值)不需要自己手动操作迭代器
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
vector<int>::iterator it=nums.begin();
while(it<nums.end())
{
if(*it!=val)
it++;
else
nums.erase(it);
}
return nums.size();
}
};