题目

要点
- input: nums->list, output: k -> int, k is the number of different elements.
- nums is in non-decreasing order
No extra space for another array, O(1) extra memory
代码
class Solution:def removeDuplicates(self, nums: List[int]) -> int:if(len(nums)==0):return 0else:curr_val = nums[0]curr_index = 0for i,value in enumerate(nums,start=0):if value != curr_val:curr_val = valuecurr_index +=1nums[curr_index]=valuereturn curr_index+1
分析
用curr_val记住上一次数字,以此判断这次的数字是否该存放。
运用双指针curr_index, i。一个记住当前arr将要存放的位置,一个遍历数组。
额外细节
做题过程中发现用enumerate比用in range耗时更短。
一般来说,当同时需要 count 和 value的时候应该用enumerate,并且count可以不用从0开始。
注意:enumerate(nums, start=1)不代表从nums[1]开始循环,它只代表count从1开始计数。
why enumerate is better than in range in some cases?
第二次更新(2022/04/14)
代码
class Solution:def removeDuplicates(self, nums: List[int]) -> int:prev = nums[0]curr_index = 1length_ = len(nums)for i in range(1,len(nums)):if(prev != nums[i]):nums[curr_index] = nums[i]prev = nums[i]curr_index += 1return curr_index
`
