描述
给出一个无序的整数数组,找出其中没有出现的最小正整数。
您在真实的面试中是否遇到过这个题? 是
样例
如果给出 [1,2,0], return 3
如果给出 [3,4,-1,1], return 2
挑战
给出一个无序的整数数组,找出其中没有出现的最小正整数。
您在真实的面试中是否遇到过这个题? 是
样例
如果给出 [1,2,0], return 3
如果给出 [3,4,-1,1], return 2
挑战
只允许时间复杂度O(n)的算法,并且只能使用常数级别的空间。
分析
首先对数组进行排序,时间复杂度为O(nlogn)
然后把里面重复的数组去掉
最后找到最小的正整数1,如果没有返回1,如果有一次加1,知道不能匹配为止。
程序
class Solution {
public:
/**
* @param A: An array of integers
* @return: An integer
*/
int firstMissingPositive(vector<int> &A) {
// write your code here
if (A.empty())
return 1;
sort(A.begin(), A.end());//排序
A.erase(unique(A.begin(), A.end()), A.end());//去掉重复的
auto it = find(A.begin(), A.end(), 1);//发现最小的正整数1
if (it == A.end())//没有找到
return 1;
else{//找到
int result = 2;
for (auto i = it + 1; i != A.end(); i++){
if (*i != result)
break;
result++;
}
return result;
}
}
};