448 找到所有数组中消失的数字

 

 方法1:

1 counter = set(nums)
2 N = len(nums)
3 res = []
4 for i in range(1,N+1):
5     if i not in counter:
6         res.append(i)
7 return res

方法2:原地修改数组(这个想法有些厉害)

当前元素是 nums[i],那么我们把第 nums[i] - 1位置的元素 乘以 -1,表示这个该位置出现过。当然如果 第nums[i]−1 位置的元素已经是负数了,表示 nums[i]已经出现过了,就不用再把第 nums[i] - 1位置的元素乘以 -1。最后,对数组中的每个位置遍历一遍,如果 i位置的数字是正数,说明 i未出现过。

 空间复杂度为o(1)

1 for i,num in enumerate(nums):
2     if nums[abs(num)-1] > 0:
3         nums[abs(num)-1] *= -1
4 res = []
5 for i in range(len(nums)):
6     if nums[i] > 0:
7         res.append(i+1)
8 return res

 

posted @ 2022-09-29 15:28  努力中的小菜鸟  阅读(33)  评论(0)    收藏  举报