非常具有启发性的多解题
Leetcode Link: 645. 错误的集合 - 力扣(LeetCode)
题目

解法一
思路:
重复元素 = nums 和 - 去重后 nums 的和
缺失元素 = 1到n的和(正常的和) - 去重后nums的和
题解:
class Solution:
def findErrorNums(self, nums: List[int]) -> List[int]:
res = [0,0]
res[0] = sum(nums) - sum(list(set(nums)))
res[1] = sum([i for i in range(1, len(nums)+1)]) - sum(list(set(nums)))
return res解法二
思路: 哈希表,查数量就行
题解:
class Solution:
def findErrorNums(self, nums: List[int]) -> List[int]:
comp = [ 0 for _ in range(len(nums)+1)]
for val in nums:
comp[val] += 1
res = [0, 0]
for i, val in enumerate(comp[1:]):
if val == 2: res[0] = i+1 # 注意遍历的起点,这里需要 +1
if val == 0: res[1] = i+1
# 可以提前退出
if res[0] != 0 and res[1] != 0: break
return res