首页 > 代码库 > [leetcode]First Missing Positive

[leetcode]First Missing Positive

问题描述:

Given an unsorted integer array, find the first missing positive integer.

For example,
Given [1,2,0] return 3,
and [3,4,-1,1] return 2.

Your algorithm should run in O(n) time and uses constant space.


基本思路:

找到第一个没有出现的正整数。

把出现的正整数数值放到与下标一致的位置,至于非正整数出现的位置和重复正整数放置的位置,我们不管。再判断什么位置最先出现不连续的数值,就是答案了


代码:

int firstMissingPositive(int A[], int n) {  //C++
        
        for(int i = 0; i< n; i++)
        {
             if(i == A[i]-1) continue;
            int j = i;
            while(A[j] > 0 && A[j] <= n)
            {
                if(A[j] == A[A[j]-1])
                    break;
                int tmp = A[A[j]-1];
                A[A[j]-1] = A[j];
                A[j] = tmp;
            }
        }
        
        int p;
        for(p = 0; p< n; p++)
            if(A[p] != p+1)
                return p+1;
        if(p == n)
            return n+1; 
        else return 1;
    }


[leetcode]First Missing Positive