qingcheng奕  

https://oj.leetcode.com/problems/first-missing-positive/

给一列数,找出缺失的第一个正数。要求时间复杂度 O(n)

第一步遍历一遍,找出最大的数和最小的数。

第二步建立一个vector,以 max+1 为size。

第三部遍历一遍,存储每个存在的数到相应的下标那里。

第四部遍历一遍,寻找数组中第一个计数是0的数。

class Solution {
public:
    int firstMissingPositive(int A[], int n) {
        int min = 2;
        int max = 0;
        //find the smallest and the biggest
        for(int i = 0;i<n;i++)
        {
            max = A[i]>max?A[i]:max;
            min = min>A[i]?A[i]:min;
        }
        if(max == 0)
            return 1;
        if(min == 2)
            return 1;
         
        vector<int> map;
        map.resize(max+1);
        for(int i = 0;i<n;i++)
        {
            if(A[i]>0)
                map[A[i]] = 1;
        }
        for(int i =1;i<max;i++)
            if(map[i]==0)
                return i;
        return max+1;
    }
};

 

posted on 2014-06-30 21:07  qingcheng奕  阅读(156)  评论(0编辑  收藏  举报