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

牛客题霸 [数组中未出现的最小正整数] 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;
    }
};
posted @ 2020-12-02 17:45  回归梦想  阅读(308)  评论(0编辑  收藏  举报