Given a sorted array nums, remove the duplicates in-placesuch 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 ofnums
being1, 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 ofnums
being modified to0
, 0, 1, 1, 2, 3 and 3 respectively. It doesn't matter what values are set beyond the returned length.
题意:给一个排序的list,把超过两个相同的元素删掉。要求空间复杂度为O(1)
思路:用last_int记录上一次的元素,用flag记录这个元素已经出现过几次。如果flag=2了,就删除掉当前元素。如果这次和上次元素一样,flag+1。如果这次和上次元素不一样,flag=1,并重新记录上一个元素
class Solution(object):
def removeDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if(nums==[]):
return 0
last_int=nums[0]
flag=1
length=len(nums)
i=1
while(1):
if(i<length):
if(nums[i]==last_int):
if(flag==2):
nums.remove(nums[i])
length-=1
continue
else:
flag+=1
else:
flag=1
last_int=nums[i]
else:
break
i+=1
return len(nums)