[leetcode刷题系列]First Missing Positive

好吧,智商是硬伤。 我承认题目要求的O(n)复杂度和常量空间,我没想到算法。于是就Google了下。

这种思路确实第一次见。长见识了。


class Solution {
public:
    int firstMissingPositive(int A[], int n) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        for(int i = 0; i < n; ++ i){
            int now = i;
            while(now >= 0 && now < n){
                if(A[now] - 1 == now)
                    break;
                int target = A[now] - 1;
                if(target < 0 || target >= n || A[now] == A[target])
                    break;
                swap(A[target], A[now]);
            }
        }
        for(int i = 0; i < n; ++ i)
            if(A[i] != i + 1)
                return i + 1;
        return n + 1;
    }
};


你可能感兴趣的:([leetcode刷题系列]First Missing Positive)