题目是删除数组中的重复的元素
我的方法是
int removeDuplicates(vector<int>& nums) {
if (nums.size() == 0)
{
return 0;
}
for (vector<int>::iterator it = nums.begin(); it != nums.end();) {
vector<int>::iterator it2 = it++;
if (*it == *it2)
{
it = nums.erase(it);
}
else
{
it++;
}
}
return nums.size();
答案是
上面那行是原来的
不知道为什么会是这样的结果
错误在于
vector<int>::iterator it2 = it++; 和 it++;两句会导致it跳过一些重复元素。
将vector<int>::iterator it2 = it++; 改为 vector<int>::iterator it2 = it+1; 即可。但是还要考虑 it2 取到 end的情况,所以要加上保护。
for (vector<int>::iterator it = nums.begin(); it != nums.end();) {
vector<int>::iterator it2 = it+1;
if (it2!=nums.end()) {
if (*it == *it2)
{
it = nums.erase(it);
}
else
{
it++;
}
}
else {
it++;//or break;
}
}