Tony's Log

Algorithms, Distributed System, Machine Learning

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

Similar with "Longest Consecutive Sequence". Another usage to hashset.

Take care of corner cases!

class Solution {
public:
    int firstMissingPositive(int A[], int n) {
        if (n == 0) return 1;
        unordered_set<int> set;
        int minPos = std::numeric_limits<int>::max();
        for (int i = 0; i < n; i ++)
        {
            int n = A[i];
            if (n >= 0)
            {
                set.insert(n);
                minPos = std::min(minPos, n);
            }
        }
        if (minPos > 1) return 1;

        int p = std::numeric_limits<int>::max();
        if (set.size() == 0) return 1;

        for (int i = 0; i < n; i++)
        {
            int n = A[i];
            if (n < 0) continue;
            int n1 = n - 1;
            int n2 = n + 1;
            if (n1 > 0)
            {
                if (set.find(n1) == set.end())
                    p = std::min(p, n1);
            }
            if (n2 > 0)
            {
                if (set.find(n2) == set.end())
                    p = std::min(p, n2);
            }
        }
        return p;
    }
};
posted on 2014-07-28 12:27  Tonix  阅读(171)  评论(0编辑  收藏  举报