80. Remove Duplicates from Sorted Array II
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.
方法:双指针
一个快指针遍历所有的元素,一个慢指针记录满足条件的index。
每一次判断元素是否相等,若相等就记录相等的次数,并将相等次数小于等于2次的从头记录(后面的不管)
题目当中的*“modifying the input array in-place with O(1) extra memory.”*
意思是只能通过一次赋值来改变
python
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
index=1
cnt=0
for i in range(1,len(nums)):
if(nums[i]==nums[i-1]):
cnt=cnt+1
else:
cnt=0
if(cnt<2):
nums[index]=nums[i]
index=index+1
return index
java
class Solution {
public int removeDuplicates(int[] nums) {
int i =0;
int cnt=0;
int index=1;
for(i=1;i<nums.length;i++)
{
if(nums[i]==nums[i-1]){
cnt++;
}
else{
cnt=0;
}
if(cnt<2){
nums[index]=nums[i];
index++;
}
}
return index;
}
}