*[codility]MissingInteger

今天开始刷刷codility上respectable的题目,难度适中。

https://codility.com/demo/take-sample-test/missing_integer

本题是找出数组里第一个非负的整数,要求复杂度O(n)。那么首先想到的做法是排序,但这样负责度就上去了。要从nlogn降到n,常见的一个做法是用hashtable,这里就可以用set记录。要注意的是全负的情况,所以这里用了maxVal=0作为初值。

#include <unordered_set>
using namespace std;

int solution(vector<int> &A) {
    // write your code in C++11
    unordered_set<int> positives;
    int maxVal = 0;
    for (int i = 0; i < A.size(); i++)
    {
        if (A[i] > 0 && positives.find(A[i]) == positives.end())
        {
            positives.insert(A[i]);
            if (A[i] > maxVal)
                maxVal = A[i];
        }
    }
    if (positives.size() == maxVal)
        return maxVal+1;
    for (int i = 1; i < maxVal; i++)
    {
        if (positives.find(i) == positives.end())
        {
            return i;
        }
    }
}

  

posted @ 2014-07-27 10:54  阿牧遥  阅读(487)  评论(0编辑  收藏  举报