Leetcode First Missing Positive

OpenSoucre發表於2014-07-03

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.

給定無序整型陣列,找出第一個不在陣列裡的正整數,要求時間複雜度為O(n),空間複雜度為O(1)

本題使用陣列下標來儲存相應的值,比如第k個元素(對應的下標是k-1)儲存數字k,也就是A[k-1] = k。

對於大於陣列長度的數字或者小於1的數字直接拋棄

一旦有了新陣列,就從頭開始掃描,遇到第一個A[k-1]不等於k時,輸出k,如果沒有遇到,那結果只能是陣列長度的下一個數

class Solution {
public:
    int firstMissingPositive(int A[], int n) {
        for(int i = 0 ; i < n; ++ i){
            if(A[i] > 0 && A[i]<=n){
                if(A[i]-1 != i && A[A[i]-1]!=A[i]) {
                    swap(A[i],A[A[i]-1]);
                    i--;
                }
            }
        }
        for(int i = 0 ; i < n; ++ i)
            if(A[i]-1 != i) return i+1;
        return n+1;
    }
};

相關文章