本题源自LeetCode
--------------------------------------------------------
思路:
1 如果A[i]是正数 并且A[i]<n 就把 它 放到i-1的位置上.这样遍历一遍数组,如果A[i]不等于它的下标加1 就是第一个缺失的正数
代码:
int firstMissingPositive(int A[], int n) {
for(int i=0;i<n;i++){
while(A[i]>0&& A[i]<=n && A[i]!=A[A[i]-1])
swap(A[i],A[A[i]-1]);
}
for(int i=0;i<n;i++){
if(A[i]!=(i+1))
return i+1;
}
return n+1;
}
思路2
哈希表,把正正数都映射到一个哈希表中。然后遍历哈希表,如果没有出现就说明缺失。
代码:
int firstMissingPositive(int A[], int n) {
vector<int> array(n+1,0);
for(int i=0;i<n;i++){
if(A[i]<=n&&A[i]>0){
array[A[i]]++;
}
}
for(int i=1;i<=n;i++){
if(array[i]==0)
return i;
}
return n+1;
}