力扣442题(Python3版)
给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。
你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。
这里可以使用字典记录每个数出现的次数,以该数字为key,出现的次数为value。
这里提供一种简单构建该字典的方法——defaultdict,该类属于collections包,defaultdict类避免KeyError异常。
defaultdict() 可以传入多种工厂函数为参数,这里传入int。可以避免key不存在而引起的报错。
defaultdict()还可以传入list,str,set等,作用是当key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0.
class Solution:
def findDuplicates(self, nums: List[int]) -> List[int]:
count = defaultdict(int)
for i in nums:
count[i] += 1
return [key for key in count if count[key] == 2]
最终运行结果: