今天开始刷刷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; } } }