leetcode: First Missing Positive

来源:互联网 发布:kof98键盘优化版 编辑:程序博客网 时间:2024/06/07 20:47

这道题和之前做过的在O(n)时间查找长度为n的数组中是否存在重复元素的思路相似。  我们还是在O(n)时间内将每一个符合要求的数A[i] = i;那么置换过后出现过的n以内正数都会在其位置上,我们只需遍历一遍,找到A[i]!=i的输出即可。   要注意的是这样置换的话只能将1--n-1的数置换到其位置上,所以如果在1--n-1上都正确,我们要判断A[0]是否为n来确定输出n或是n+1。

public class Solution {    public int firstMissingPositive(int[] A) {        int len = A.length;        if( len == 0 )        {            return 1;        }        int st=0;        while( st<len )        {            if( A[st] == st )            {                st++;                continue;            }            if( A[st]>=0 && A[st]<len && A[A[st]] != A[st] )            {                int tmp = A[st];                A[st] = A[A[st]];                A[tmp] = tmp;                continue;            }            else            {                st++;            }        }        for( int i=1;i<len;i++ )        {            if( A[i] != i )            {                return i;            }        }        if( A[0] == len )        {            return len+1;        }        return len;    }}


0 0
原创粉丝点击