牛客题霸 [数组中未出现的最小正整数] C++题解/答案

题目描述

给定一个无序数组arr,找到数组中未出现的最小正整数
例如arr = [-1, 2, 3, 4]。返回1
arr = [1, 2, 3, 4]。返回5
[要求]
时间复杂度为O(n)O(n),空间复杂度为O(1)O(1)

题解:

如果一个数是正整数,那我们就把他换到他所属的位置上
比如读到2,我们就把2换到第2个位置上
这样所有位置上都是他对应的数,哪个位置存在空缺就说明未出现哪个正整数

代码:

class Solution {
   
public:
    /** * return the min number * @param arr int整型vector the array * @return int整型 */
    int minNumberdisappered(vector<int>& arr) {
   
        // write code here
        int len=arr.size();
        for(int i=0;i<len;i++)
        {
   
            if(arr[i]>0&&arr[i]<len)swap(arr[i],arr[arr[i]-1]);
        }
        for(int i=0;i<len;i++)
        {
   
            if(arr[i]!=i+1)return i+1;
        }
        return len+1;
    }
};