这道题的题意是删除nums中和val值相等的元素,并返回新数组的元素个数。思路是首先对数组进行排序,这样和val值相同的数字会连续出现在一个区域,容易删除。定义两个迭代器,分别指向排序后新数组的val值区域的起始和终止位置,然后调用erase()函数。
实现代码如下:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int len = nums.size();
sort(nums.begin(), nums.end());
vector<int> ::iterator iter1 = nums.begin();
vector<int> ::iterator iter2 = nums.begin();
for (int i = 0; i < nums.size(); i++)
{
if (nums[i] == val)
{
len--;
iter2++;//找到终止位置
if (nums[i + 1] != val)break;
}
else{ iter1++; //找到起始位置
iter2++;
}
}
nums.erase(iter1, iter2);//删除从iter1开始到iter2前一位的数字
return len;
}
};