Sunday, February 10, 2013

First Missing Positive

Problem:
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.

Solution:
class Solution {
public:
    int firstMissingPositive(int A[], int n) {
        for (int cur = 0; cur < n; cur++) {
            if (A[cur] <= 0) {
                A[cur] = n + 1;
            }
        }

        for (int i = 0; i < n; i++)
            if (abs(A[i]) <= n && A[abs(A[i]) - 1] > 0)
                A[abs(A[i]) - 1] *= -1;

        for (int i = 0; i < n; i++)
            if (A[i] > 0) {
                return i + 1;
            }

        return n + 1;
    }
};

No comments:

Post a Comment