题目:
题目链接: https://leetcode-cn.com/problems/set-mismatch/
解题思路:
基础方式为暴力搜索两个for循环,第一层循环是1到n,第二层循环为nums,查看第一层循环的数字,是否在nums数组中,时间复杂度为
其实我们可以创建一个n + 1长度的数组,初始化为0,然后对nums进行遍历
遍历时,使用当前遍历到的数字作为下标,更新创建的数组值 + 1,然后再对创建的数组进行遍历
如果数组中的值为0,则下标为缺失的数字;如果数组中的值为2,则下标为重复的数字
时间复杂度为O(2n) = O(n)
代码实现:
class Solution:
def findErrorNums(self, nums: List[int]) -> List[int]:
rec = [0] * (len(nums) + 1)
for a in nums:
rec[a] += 1
lost_num = 0
repeat_num = 0
for idx in range(1, len(nums) + 1):
if rec[idx] == 0:
lost_num = idx
elif rec[idx] > 1:
repeat_num = idx
return [repeat_num, lost_num]