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