题目
给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗?
以任意顺序返回这两个数字均可。
示例
示例 1:
输入: [1]
输出: [2,3]
示例 2:
输入: [2,3]
输出: [1,4]
思路
- 因为题目中意思为给定1-n的数字缺少两个数字,这里可以确定总范围n的值,就是数组长度加2。
- 将给定数组中的所有元素都存于哈希表中,键值都为该元素
- 搜索范围1-n,判断是否存在于哈希表中,如果不存在则加入答案中即可。
题解
class Solution: def missingTwo(self, nums: List[int]) -> List[int]: ans = [] tmp = {} # 初始化哈希表 for i in nums: tmp[i] = i # 遍历搜索 for i in range(1, 2+len(nums)+1): # 哈希表中不存在 if tmp.get(i) is None: ans.append(i) return ans