问题描述:
Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.
Find all the elements of [1, n] inclusive that do not appear in this array.
Could you do it without extra space and in O(n) runtime? You may assume the returned list does not count as extra space.
解决方案:
class Solution(object):
def findDisappearedNumbers(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
for a_num in nums:
nums[abs(a_num)-1] = -abs(nums[abs(a_num)-1])
return [i+1 for i,a_num in enumerate(nums) if a_num>0]
思路说明:
第一次遍历:用相反数的形式标记出现过的数字(下标);
第二次遍历:找出没有被标记的数字(下标),并返回;