欢迎使用CSDN-markdown编辑器

来源:互联网 发布:hadoop python api 编辑:程序博客网 时间:2024/06/05 04:53

今天去乐视笔试的一个题目。题目大意如下,给一个整数序列,找出其中没出现过的最小的正整数。
如输入:1,2,0。则未出现的最小正整数是3。
如输入:3,3,2,-1。则未出现的最小正整数是2。
要求时间复杂度O(N),空间复杂度是N(1)。
这个一开始确实是不知道怎么做,主要是这个复杂度限制。后来经过讨论,终于想到了一个办法。即采用本地数组的空间,将正整数k放在第k-1位。再重头过一遍,即可知道哪个数没出现过了。
具体代码如下。

//最小的不存在的正整数int minNonExist(int[]arr){    int next=-1;    while(++next<arr.length){        int tmp=arr[next];        while(tmp>=1&&tmp<=arr.length&&arr[tmp-1]!=tmp){            int t2=arr[tmp-1];            arr[tmp-1]=tmp;            tmp=t2;        }    }    for(int k=0;k<arr.length;++k)        if(arr[k]!=k+1)            return k+1;    return arr.length+1;}
0 0