class Solution {
public:
vector<int> majorityElement(vector<int>& nums) {
int n = nums.size();
if (n <= 1) {
return nums;
}
vector<int> ret;
vector<pair<int, int> > candidates;
candidates.resize(2);
for (int i = 0; i < n; ++i) {
int j = 0;
for (; j < 2; ++j) {
if (candidates[j].first && candidates[j].second == nums[i]) {
++candidates[j].first;
break;
}
}
if (j == 2) {
for (j = 0; j < 2; ++j) {
if (candidates[j].first == 0) {
candidates[j].first = 1;
candidates[j].second = nums[i];
break;
}
}
}
if (j == 2) {
for (j = 0; j < 2; ++j) {
--candidates[j].first;
}
}
}
sort(candidates.begin(), candidates.end(), greater<pair<int,int> >());
if (!candidates[0].first) {
return ret;
} else if (!candidates[1].first) {
candidates.resize(1);
}
for (int i = 0; i < candidates.size(); ++i) {
candidates[i].first = 0;
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < candidates.size(); ++j) {
if (nums[i] == candidates[j].second) {
++candidates[j].first;
}
}
}
for (int i = 0; i < candidates.size(); ++i) {
if (candidates[i].first > n / 3) {
ret.push_back(candidates[i].second);
}
}
return ret;
}
};