【題目描述】
Given an?unsorted?integer array, find the first?missing?positive integer.
給出一個無序的整數數組,找出其中沒有出現的最小正整數。
【題目鏈接】
www.lintcode.com/en/problem/first-missing-positive/
【題目解析】
此題可用桶排序。桶排序通常需要按照一定規則將值放入桶中,一般需要額外的 O(n) 空間,咋看一下似乎不太適合在這道題中使用,但是若能設定一定的規則原地交換原數組的值呢?這道題的難點就在于這種規則的設定。
設想我們對給定數組使用桶排序的思想排序,第一個桶放1,第二個桶放2,如果找不到相應的數,則相應的桶的值不變(可能為負值,也可能為其他值)。
那么怎么才能做到原地排序呢?即若 A[i]=x, 則將 x 放到它該去的地方 - A[x?1]=x, 同時將原來 A[x?1] 地方的值交換給 A[i].
排好序后遍歷桶,如果不滿足 f[i]=i+1, 那么警察叔叔就是它了!如果都滿足條件怎么辦?那就返回給定數組大小再加1唄。
【參考答案】