LeetCode 41 - First Missing Positive
題目
題目連結:https://leetcode.com/problems/first-missing-positive/
給一數字序列,找出序列中最小沒有出現的正整數。
要求時間複雜度 O(N),空間複雜度 O(1)。
範例說明
Example 1
1  | Input: [1,2,0]  | 
Example 2:
1  | Input: [3,4,-1,1]  | 
Example 3:
1  | Input: [7,8,9,11,12]  | 
想法
假設序列名為 a,長為 N,索引從開始,則答案一定在 1 ~ N + 1 之間。
若序列有出現 x,且 x 在 1 ~ N 之間,且將 a[x - 1] 設置為 x 來代表數字 x 有出現過。則由左至右第一個 a[i - 1] != i 的 i 就是我們要找的答案。
在將 a[x - 1] 設置為 x 時,a[x - 1] 可能還存放著其他數字,但這時候存放 x 的位置就空下來了,所以可以想成是將兩個數字交換。
數字交換後,a[x - 1] 被放置到當前的位置,所以 a[x - 1] 所存之數字要立即被處理,否則將繼續向下遍歷就不會再經過這個數字了。
程式碼
1  | /**  |