题目描述:
Given a sorted array nums, 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 by modifying the input array in-place with O(1) extra memory.
例子:
Example 1:
Given 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 returned length.
Example 2:
Given nums = [0,0,1,1,1,2,2,3,3,4],
Your function should return length = 5, with the first five elements of nums being modified to 0, 1, 2, 3, and 4 respectively.
It doesn't matter what values are set beyond the returned length.
思路:
这道题难就难在不能有新的memory被创建,所以要在nums的基础上进行计算。刚开始分析这道题很容易想到用set进行重复元素的处理,不过这样是不行的,因为题目要求采用in-place的方法。那么我们可以采用两个指针,第一个指针是为了计算结果,第二个指针是遍历整个list。当第二个指针结束工作之后,直接返回第一个指针的数值即可。
代码:
class Solution:
def removeDuplicates(self, nums):
index = 0
for i in range(1,len(nums)):
if nums[index] != nums[i]:
index += 1
nums[index] = nums[i]
return index + 1 #因为从0开始,所以需要➕1