去重计数 removeDuplicates python
分析 去重算法,这里实现4个方法。 字典,利用了创建字典键,不能有重复键的特点。list转dict转list 集合,利用了集合去重的特点。set(list)转list 排序用两种方法:1、对list排序,前后值对比,只对不相等的计数。这个方法空间复杂度O(1),符合题目要求 2、对list排序,再创建一个空的mylist,存在list且不存在mylist的值,放入mylist。空间复杂度O(n) 代码: #使用字典方法 def removeDuplicates1(nums): mylist=list(dict.fromkeys(nums))#使用列表项作为键创建字典。这将自动删除任何重复项,因为词典不能有重复的键。 return len(mylist) #使用集合方法 def removeDuplicates2(nums): mylist=list(set(nums))#集合(set)是一个无序的不重复元素序列。 return len(mylist) #使用排序方式1 def removeDuplicates3(nums): nums=sorted(nums)#先对数组进行排序,然后去重计数 j=1 for i in range(len(nums)-1): if nums[i]==nums[i+1]: continue else: j=j+1 return j #使用排序方式2 def removeDuplicates4(nums): nums=sorted(nums)#先对数组进行排序,然后放入另外一个数组 mylist=[] for i in range(len(nums)-1): if nums[i] not in mylist: mylist.append(nums[i]) return len(mylist) if __name__ == __main__: nums=[11,11,11,22,33,33,11] print(removeDuplicates1(nums)) print(removeDuplicates2(nums)) print(removeDuplicates3(nums)) print(removeDuplicates4(nums)) nums=[] print(removeDuplicates1(nums))
运行结果:
3 3 3 3 0
Process finished with exit code 0
题目:
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。 示例 2: 给定 nums = [0,0,1,1,1,2,2,3,3,4], 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。 你不需要考虑数组中超出新长度后面的元素。