用位置記錄數據出現的頻率

問題:返回第一個丟失的正數

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章