目录

​1,题目描述​

​2,思路​

​3,代码​

​4,测试效果​


1,题目描述

Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twice and return the new length.

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

Example 1:

Given nums = [1,1,1,2,2,3],

Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3 respectively.

It doesn't matter what you leave beyond the returned length.

Example 2:

Given nums = [0,0,1,1,1,1,2,3,3],

Your function should return length = 7, with the first seven elements of nums being modified to 0, 0, 1, 1, 2, 3 and 3 respectively.

It doesn't matter what values are set beyond the returned length.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

数组已按升序排序,原地操作数组,使数组中的元素重复不超过两次,并返回新数组长度;

 

2,思路

快慢指针;

数组元素数小于等于2时,不会有移位,故直接返回nums.size()即可;

初始时slow=1,fast=2;

若nums[fast] == nums[slow-1]即有连续三个元素相等,则low不变,fast向前;

若nums[fast] != nums[slow-1],slow加一,nums[slow] = nums[fast]

示例一:

LeetCode_Array_80. Remove Duplicates from Sorted Array II (C++)_Array

实例二:

LeetCode_Array_80. Remove Duplicates from Sorted Array II (C++)_LeetCode_02

示例三:

LeetCode_Array_80. Remove Duplicates from Sorted Array II (C++)_Array_03

3,代码

可通用(max=1,2,3,4...,分别表示元素最多重复1,2,3,4...次)

class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size() <= 2) return nums.size();//元素数目小于等于2个时不会出现移位

int fast = 2;
int slow = 1;
int max = 2;
for(; fast<nums.size(); fast++) {
if(nums[fast] != nums[slow-max+1]) {
slow++;
nums[slow] = nums[fast];
}
}
return slow+1;
}
};

 

4,测试效果

LeetCode_Array_80. Remove Duplicates from Sorted Array II (C++)_Array_04