给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

好坑的一道题啊!做了一个小时,23333.。。。
int removeDuplicates(vector<int>& nums) {
if (nums.size() == 0)
return 0;
if (nums.size() == 1)
return 1;
int ipos = 0;
for (int i = 0; i < nums.size();) {
while (i + 1 < nums.size() && nums[i] == nums[i + 1])
i++;
if (i + 1 < nums.size()) {
nums[++ipos] = nums[++i];
}
else {
if (ipos < i)
nums[++ipos] = nums[i];
else
nums[ipos++] = nums[i];
break;
}
}
if (ipos < nums.size())
nums.erase(nums.begin() + ipos, nums.end());
return nums.size();
}


探讨如何在不使用额外数组空间的情况下,修改输入数组以删除重复元素,并返回新长度。采用双指针技巧,确保操作在O(1)额外空间内完成。
145

被折叠的 条评论
为什么被折叠?



