給定一個(gè)范圍在? 1 ≤ a[i] ≤ n (?n = 數(shù)組大小 ) 的 整型數(shù)組,數(shù)組中的元素一些出現(xiàn)了兩次,另一些只出現(xiàn)一次。
找到所有在 [1, n] 范圍之間沒有出現(xiàn)在數(shù)組中的數(shù)字。
您能在不使用額外空間且時(shí)間復(fù)雜度為O(n)的情況下完成這個(gè)任務(wù)嗎? 你可以假定返回的數(shù)組不算在額外空間內(nèi)。
示例:
輸入:
[4,3,2,7,8,2,3,1]
輸出:
[5,6]
思路1:利用哈希表
n=len(nums)
????????nums1=[]
????????hash1={}
????????for?i?in?range(n):
????????????if?nums[i]?in?hash1:
????????????????hash1[nums[i]]=hash1[nums[i]]+1
????????????else:
????????????????hash1[nums[i]]=1
????????for?i?in?range(1,n+1):
????????????if?i?not?in?hash1:
????????????????nums1.append(i)
????????return?nums1
思路2:
在原數(shù)組上直接修改,將出現(xiàn)過的數(shù)組元素作為下標(biāo)使得原數(shù)組下該下標(biāo)的元素小于零,則重新遍歷數(shù)組大于零元素對(duì)應(yīng)的索引即是沒有出現(xiàn)過的元素。
newindex=0
????????for?i?in?range(len(nums)):
????????????newindex=abs(nums[i])-1
????????????if?nums[newindex]>0:
????????????????nums[newindex]*=-1
????????result=[]
????????for?i?in?range(1,len(nums)+1):
????????????if?nums[i-1]>0:
????????????????result.append(i)
????????return?result