leetcode80-- 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.




class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
if len(nums)<=2:
return len(nums)

# 仍用双指针法， 因为这时候可以保有两个，所以快的就初始化为1,然后用一个计数器count初始化为1,代表还可以再接受几次重复
pre = 0
cur = 1

count = 1
while cur<len(nums):
if nums[pre]==nums[cur] and count==0:   # 这时候说明刚好是两个的情况,此时只让快的往前走.
cur += 1

else:
if nums[pre] == nums[cur]:  # 这时候说明count=1
count -= 1
else:  # 否则的话就归为1
count = 1
#
pre += 1
nums[pre] = nums[cur]
cur += 1

return pre +1  