牛客题霸 [数组中未出现的最小正整数] 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 hereint 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;}
};