*[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;

        }

    }

}

  

你可能感兴趣的:(Integer)