問題:返回第一個丟失的正數
Given an unsorted integer array, find the first missing positive integer.
Your algorithm should run in O(n) time and uses constant space.
For example,
Given [1,2,0]
return 3
,
and [3,4,-1,1]
return 2
.
求解思路:用數組的位置記錄每一個元素出現的頻率,沒有出現的則爲丟失的。
如何記錄元素出現的頻率且不會覆蓋對應位置上原來存儲的數。
例如: 4 5 1 3 1 丟失的數爲2,如果用數組的第四個位置記錄4 出現的頻率,原來在第四個位置的3 就會被覆蓋。爲了避免這種現象的發生卻又不使用多餘的空間,該數字每次出現,可以在對應的位置上加一個數組的長度,而對每一個元素進行操作的時候可以用取餘運算,可以抵消加數組長度帶來的影響,並且最後可以直接除以數組長度去判斷元素出現的頻率。
實現:
lens = len(nums)
for i in range(lens):
mums[nums[I]%lens]+=lens
for i in range(lens):
freq=nums[I]//lens