原题链接:Leetcode 80. 删除有序数组中的重复项 II
实在是没想出来,看了官解,妙啊:官解
官方思路:
nums[slow-1]
表示上一个应该被保留的元素nums[fast]
表示待检查的第一个元素- 因为相同元素最多只能出现两次,因此上上个应该被保留的元素
nums[slow-2]
不应该和当前待检查的元素nums[fast]
相同(由该数组是有序数组,因此如果nums[slow-2]==nums[fast]
,则nums[slow-2]==nums[slow-1]==nums[fast]
)则当前待检查的元素nums[fast]
不应该被保留),如果当前待检查的元素应该保留,则nums[slow] = nums[fast], slow++
。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n = nums.size();
if (n <= 2)
return n;
int slow = 2, fast = 2;
while (fast < n) {
if (nums[slow - 2] != nums[fast]) {
nums[slow] = nums[fast];
slow++;
}
fast++;
}
return slow;
}
};