尋找丟失的第乙個正整數

2021-07-31 20:39:19 字數 1009 閱讀 2642

一道題目:

給出乙個無序的正數陣列,找出其中沒有出現的最小正整數。樣例

如果給出[1,2,0], return3

如果給出[3,4,-1,1], return2

今天和同事討論了一道演算法題,就是給定乙個陣列,找到這個陣列裡沒有出現的最小的正整數,這道題看起來,可以先排序,然後直接就可以找到最小正整數,但是複雜度為o(nlogn),但是感覺這道題不應該複雜度這麼高,於是想了各種辦法,同事乙個很直觀的想法是使用遞迴的方法,同事關於遞迴的認識還是很深刻的,也就是說,遞迴的本質思想是認為後面的遞迴已經完成了,一定要在這個假設下設計遞迴演算法,比如要找陣列【2,1,4,3】中沒有出現的最小正整數,使用遞迴,那麼對於第一層:2,【1,4,3】,這時,由於陣列長度為4,因此最小正整數只可能是【1,2,3,4,5】,而此時出現了2,因此現在需要考慮的陣列就是【1,3,4,5】,然後接著處理1,【4,3】,現在只需要考慮【3,4,5】,之後處理4,,只需要考慮【3,5】,然後處理5,【】,只需要考慮,因此最終的結論是5。同事關於遞迴的看法,很新穎,比如遞迴設計是當處理第乙個,認為後面的已經處理完了,可以返回你想要的結果,這種思路取設計遞迴演算法,很不錯,因此,在解決問題時,往往看問題的角度很大程度決定你解決問題的速度。回過頭來看遞迴的實際執行,如果遞迴演算法設計出來了,那麼非遞迴演算法也就出來了,將遞迴演算法轉換成非遞迴演算法,那麼就反向考慮,也就是遞迴演算法,實際上執行的順序是【】,,【4,3】,【1,4,3】,【2,1,4,3】,這樣便可以設計非遞迴演算法,可以使用for迴圈,從後向前遍歷即可。

後來,看了乙個網上的解決方案,發現還有乙個很巧妙的方法,看懂了,把演算法貼出來,想法很好,預設用陣列的下標所指位置儲存當前這個數。

int firstmissingpositive(vectora)

}for (int i = 0; i < n; i++)

if (a[i] != i + 1)

return i + 1;

return n + 1;

}

lintcode刷題 丟失的第乙個正整數

原題如下 丟失的第乙個正整數 給出乙個無序的正數陣列,找出其中沒有出現的最小正整數。您在真實的面試中是否遇到過這個題?yes 樣例如果給出 1,2,0 return3 如果給出 3,4,1,1 return2 做題思路 1 這題並不難,主要是要考慮到多種不同的情況,題目給出的陣列應該是可以有重複數字...

尋找第乙個丟失的正數

given an unsorted integer array,find the first missing positive integer.for example,given 1,2,0 return3,and 3,4,1,1 return2.your algorithm should run ...

第乙個缺失的正整數 leetcode

為什麼不能nums這樣賦值呢?nums nums i nums i 呢 例如 如果陣列中存在3 那麼我們可不可以nums 3 3呢?這樣最後的結果會不會和 0,1,2,3,4,5 嗎?然後對這個陣列從1開始遍歷不就好了嗎這樣做事不行的,因為 1,2,3,0 這樣最後的結果就是 1,1,0,3 因為值...