Problem:
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
For example,
Given input array nums = [1,1,2]
,
Your function should return length = 2
, with the first two elements of nums being 1
and 2
respectively. It doesn't matter what you leave beyond the new length.
class Solution(object):
def removeDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums) == 0: return len(nums)
last = nums[-1]
for index in range(len(nums)-2,-1,-1):
if last == nums[index]: del nums[index]
else: last = nums[index]
return len(nums)
Note:
由于OJ对空间有要求,不允许重新创建新的列表,在实际使用过程中,其实有更加简单的方法:
将给定List转化为Set类型,即可自动消除其中的重复元素。
class Solution(object):
def removeDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
return len(set(nums))