题目:
给你一个有序数组 nums
,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
提示:
nums
已按升序排列
思路:使慢指针指向的数字和其向前数两个的位置上的数据与快指针指向的数字不相等
Python 解法:
class Solution:def removeDuplicates(self, nums: List[int]) -> int:def solve(k):u = 0for x in nums:if u < k or nums[u - k] != x:nums[u] = xu += 1return ureturn solve(2)
C++解法:
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;}
};
注:要求最多k个重复数字 则前k个可以不必检查