Given an unsorted integer array, find the first missing positive integer.
For example,
Given [1,2,0]
return 3
,
and [3,4,-1,1]
return 2
.
Your algorithm should run in O(n) time and uses constant space.
給定無序整型陣列,找出第一個不在陣列裡的正整數,要求時間複雜度為O(n),空間複雜度為O(1)
本題使用陣列下標來儲存相應的值,比如第k個元素(對應的下標是k-1)儲存數字k,也就是A[k-1] = k。
對於大於陣列長度的數字或者小於1的數字直接拋棄
一旦有了新陣列,就從頭開始掃描,遇到第一個A[k-1]不等於k時,輸出k,如果沒有遇到,那結果只能是陣列長度的下一個數
class Solution { public: int firstMissingPositive(int A[], int n) { for(int i = 0 ; i < n; ++ i){ if(A[i] > 0 && A[i]<=n){ if(A[i]-1 != i && A[A[i]-1]!=A[i]) { swap(A[i],A[A[i]-1]); i--; } } } for(int i = 0 ; i < n; ++ i) if(A[i]-1 != i) return i+1; return n+1; } };