方法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
标签:448,数字,nums,res,位置,num,数组,元素 From: https://www.cnblogs.com/wanxueyu/p/16741752.html