(个人水平有限,请见谅!)
描述:
给出一个无序的数列,找出其中缺失的第一个正数,要求复杂度为 O(n) 如:[1,2,0],第一个缺失为3。 如:[3,4,-1,1],第一个缺失为2。
输入:
1,2,0。
输出:
3。
输入样例:
1,2,0
3,4,-1,1
-1,-3,-5
1,2,3
-1,-10,0
输出样例:
3
2
1
4
1
代码示例:
#include <iostream>
#include <bits/stdc++.h>
#include <vector>
#include <string>
using namespace std;
int main()
{
char line[1001];
while (cin.getline(line, 1000)) {
vector<int> vec;
int temp = 0;
int pause = -1;
int result = 1;
int flag = 0;
int tt = 0;
char *p = strtok(line, ",");
while(p){
sscanf(p, "%d", &temp);
vec.push_back(temp);
if (temp == -3)
{
tt = 1;
}
p = strtok(NULL,",");
}
sort(vec.begin(),vec.end());
for (int i = 0; i < vec.size(); i++){
if (vec[i] == 1){
pause = i;
break;
}
}
if (tt = 0)
cout << vec[0] << vec[1] << vec[2];
if (pause == -1)
cout << 1 << endl;
else{
for (int i = pause; i < vec.size(); i++){
if (vec[i] != i - pause + 1){
cout << i - pause + 1 << endl;
break;
}
if (i == vec.size()-1)
flag = 1;
}
if (flag == 1){
result = vec.size() - pause + 1;
cout << result << endl;
}
}
}
return 0;
}