描述
给出一个无序的整数型数组,求不在给定数组里的最小的正整数
例如:
给出的数组为[1,2,0] 返回3,
给出的数组为[4,3,-1,-2,1] 返回2.
你需要给出时间复杂度在O(n)之内并且空间复杂度为常数级的算法
示例1
输入:
[1,2,0]
返回值:
3
#define N 2000
class Solution {
public:
void setBitMap(int val){
bitMap[val>>5] |= 1<<(val&0x1f);
}
bool findVal(int val){
int a = bitMap[val>>5] & (1<<(val&0x1f));
if(a!=0){
return true;
}else{
return false;
}
}
int firstMissingPositive(int A[], int n) {
//Your algorithm should run in O(n) time and uses constant space.
for(int i=0;i<n;i++){
if(A[i]<0)continue;
setBitMap(A[i]);
}
int i=1;
while(1){
if(!findVal(i))break;
i++;
}
return i;
}
private:
int bitMap[N]={0};
};