分析
这题核心思想在于快慢指针开始的位置和比较位置。
当我们从 0 开始时,对于 以及 ,
我们只能不断修改判断条件去满足这种避免情况。
但如果我们从 2 开始,则只需要判断 slow - 2 != fast
的情况即可。
解答
class Solution {
public:
int removeDuplicates(vector<int> &nums) {
auto n = nums.size();
if (n < 2)
return n;
auto slow = 2;
for (auto fast = 2; fast < n; ++fast) {
if (nums[fast] != nums[slow - 2]) {
nums[slow++] = nums[fast];
}
}
return slow;
}
};