/**********************************************************************************************************
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
本质上是桶排序 (bucket sort),每当 A[i]!= i+1 的时候,将 A[i] 与 A[A[i]-1] 交换,直到无法
交换为止,终止条件是 A[i]== A[A[i]-1]。
**********************************************************************************************************/
class Solution{
public:
int firstMissingPositive(int A[],int n){
bucker_sort(A, n);
for(int i = 0;i < n; i++){
if(A[i] != (i + 1))
return i + 1;
return n + 1;
}
}
private:
static void bucket_sort(int A[], int n){
for(int i = 0; i < n; i++){
while(A[i] != i + 1){
if(A[i] <=0 || A[i] > n || A[i] == A[A[i] - 1])
break;
swap(A[i], A[A[i] - 1]);
}
}
}
};
参考资料:
Leetcode题解