题解 | #数组中未出现的最小正整数#
数组中未出现的最小正整数
http://www.nowcoder.com/practice/8cc4f31432724b1f88201f7b721aa391
思路:
对于是正整数并且不小于该数组的大小的值,把他放在对应自然数该在的位置(例如1就放在第一个位置,即arr[0]),对于负数和超出该数组大小的值的数,暂且不动,如果有应在他们位置上的数,他们自然会被交换走。 如此遍历一次后,再遍历一次数组,从arr[0]开始判断,哪一个地方不等于该有的正整数在的地方就是缺失了这个最小的正整数。
样例:如[-3,0,1,2,3],第一次遍历后变成[1,2,3,0,-3]
我们第二次遍历到第四个位置,发现不是4,那就是缺少4.
对于遍历完整个数组没有return的话,那就是全是正整数顺序排列,未出现的就是最后一个元素+1;
class Solution {
public:
/**
* return the min number
* @param arr int整型vector the array
* @return int整型
*/
int minNumberdisappered(vector<int>& arr) {
// write code here
for(int i=0;i<arr.size();i++)
{
if(arr[i]>0&&arr[i]<=arr.size())
swap(arr[i],arr[arr[i]-1]);
}
for(int i=0;i<arr.size();i++)
{
if(arr[i]!=i+1)
return i+1;
}
return arr.back()+1;
}
};</int>