题干懒人包
基本上跟27题很像,输入是一个已经排序好的数组,最后输出非重複数值的数量,然后以下几点要注意:
只能修改该数组,利用的空间複杂度最多为1(意思就是不能创建新的数组append值)
不用管超过回传值以后nums的值
"""比方说输入的 nums = [0,0,1,1,1,2,2,3,3,4]那最后回传值要等于五,且 nums[:5] 要包含 0, 1, 2, 3, 4 这几个数字,然后数字在该切片里的顺序不重要"""
while 解法
head 纪录当前非重複的下标 (有点像 selection sort),i 迴圈遍历到的当前元素,如果跟当前不一样非重複下标 head 加一,然后新的下标得值跟不一样的值进行交换。1
class Solution: def removeDuplicates(self, nums) -> int: head = 0 i = 1 while i < len(nums): if nums[head] != nums[i]: head += 1 nums[head], nums[i] = nums[i], nums[head] i += 1 return head + 1
for 解法
跟 while 原理一样只是改写 (这里用for 会好一点,因为不管怎么样都要循环整个数组)
class Solution: def removeDuplicates(self, nums) -> int: head = 0 for i in range(1, len(nums)): if nums[head] != nums[i]: head += 1 nums[head]= nums[i] return nums
别人的写法
意义跟上面一样,只是从纪录非重複的,变成纪录重複的数量
class Solution: def removeDuplicates(self, nums) -> int: count = 0 for i in range(1, len(nums)): if nums[i] == nums[i-1]: count += 1 else: nums[i-count] = nums[i] return nums