这题限制时间复杂度是O(n) 才能通过所有测试,之前写了一个现sorting的,复杂度是O(nlogn),Time Limited Exceed!!!
网上看到一个很赞的算法Moore voting algorithm, Stackoverflow 上有很好的解释
class Solution {
public:
int majorityElement(vector<int> &num) {
int i = 0;
int size = num.size();
int *elem = new int[size];
for (vector<int>::iterator it = num.begin(); it < num.end(); it++) {
elem[i++] = *it;
}
int candidate = 0;
int count = 0;
for (i = 0; i < size; i++) {
if (elem[i] == candidate)
count ++;
else if (count == 0)
candidate = elem[i];
else
count --;
}
return candidate;
}
};
非常简洁明了!