输入:非严格递增数组 nums。
要求:原地删除重复元素,使每个元素 最多出现两次,返回新数组长度。
输出:新数组前若干元素为保留元素,顺序保持不变。
思路:双指针法。
- 指针
slow:记录下一个可写入的位置(前两个元素可以直接保留)。 - 指针
i:遍历数组。 - 当
nums[i] != nums[slow - 2]时,说明当前元素出现次数不超过两次,可以写入。 - 否则跳过。
复杂度:时间 O(n),空间 O(1)。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n = nums.size();
if (n <= 2) {
return n;
}
int slow = 2;
for (int i = 2; i < n; i++) {
if (nums[i] != nums[slow - 2]) {
nums[slow] = nums[i];
slow++;
}
}
return slow;
}
};
删除有序数组中重复项II
238

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



