您的位置:首页 > 其它

LeetCode_First Missing Positive

2014-10-06 18:06 399 查看
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.

这类题目的思路一般都是复用原数组,并且将数组中的元素hash到原数组中,看过陈利仁老师所说的“元神归位法”,这道题目就很简单了。

以下是我的代码:

class Solution{
public:
int firstMissingPositive(int A[], int n){
if(A==NULL || n<0) throw "Invalid Arguments!";

if(n==0) return 1;

int i = 0;

// Find the smallest num Greater than 0.
int minNum = INT_MAX;
for(i=0; i<n; i++){
if(A[i]<minNum&&A[i]>0){
minNum = A[i];
}
}

if(minNum>1||minNum<=0){
return 1;
}

// Hash the num using A[i]-minNum.
for(i=0; i<n; ){
if((A[i]!=minNum+i)&&
(A[i]>0)&&
(A[i]<minNum+n)&&
(A[A[i]-minNum]!=A[i])){
swap(A,i,A[i]-minNum);
}
else{
i++;
}
}

for(i=0; i<n; i++){
if(A[i]!=i+minNum){
break;
}
}

return (i+minNum);

}
private:
void swap(int A[], int i, int j){
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: