题目描述
给你一个含 n
个整数的数组 nums
,其中 nums[i]
在区间 [1, n]
内。请你找出所有在 [1, n]
范围内但没有出现在 nums
中的数字,并以数组的形式返回结果。
示例 1:
输入:nums = [4,3,2,7,8,2,3,1]
输出:[5,6]
示例 2:
输入:nums = [1,1]
输出:[2]
思路
1)遍历数组,把数字-1的索引对应的数字,取相反数【变成负数】
2)再次遍历数组,看哪个索引对应的数值还是大于等于0的,说明他在上一轮中没有出现过。返回索引+1,即为未出现的数
PS:其中,两处的abs(num)必须加,这不是取绝对值。不加的话,for循环输出的num是:数字的存储地址
class Solution(object):
def findDisappearedNumbers(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
res = []
for num in nums:
nums[abs(num)-1] = -abs(nums[abs(num)-1])
# 这两个abs(num)必须加,这不是取绝对值。不加的话,for循环输出的num是:数字的存储地址
for i in range(len(nums)):
if nums[i]>=0:
res.append(i+1)
return res
if __name__=='__main__':
s=Solution()
nums = [4, 3, 2, 7, 8, 2, 3, 1]
print(s.findDisappearedNumbers(nums))