数组中未出现的最小正整数
优质
小牛编辑
120浏览
2023-12-01
#include <iostream>
#include<vector>
using namespace std;
int NotfountMin(vector<int> &vec)
{
int left=0;
int right=vec.size();//N
while(left<right)
{
if(vec[left]==left+1)//位置合法
{
left++; //未出现的数字位于新的left和right之间
}
else if(vec[left]<=left||vec[left]>right||vec[vec[left]-1]==vec[left])//出现不在1-N范围内的数字,那么这个最小值一定出现在1-N中间
{
vec[left]=vec[--right];
}
else//出现的位置不合法
{
int temp=vec[left];
vec[left]=vec[vec[left]-1];
vec[temp-1]=vec[left];
}
}
return left+1;
}
int main()
{
vector<int> vec={1,2,-1,3,6,5};
cout<<NotfountMin(vec);
return 0;
}