数组中未出现的最小正整数

优质
小牛编辑
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;
}