Majority Element II

Description:

Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorithm should run in linear time and in O(1) space.

Solution:

class Solution {
public:
vector majorityElement(vector& nums) {
vector rc;
if (nums.empty()) return rc;
int a, b;
int cnt1 = 0, cnt2 = 0;
auto sz = (int)nums.size();
for (int i = 0; i < sz; ++i) {
int cur = nums[i];
if (cnt1 == 0 || cur == a) {
++cnt1;
a = cur;
} else if (cnt2 == 0 || cur == b) {
++cnt2;
b = cur;
} else {
--cnt1;
--cnt2;
}
}
cnt1 = 0;
cnt2 = 0;
for (auto n : nums) {
if (n == a) ++cnt1;
else if (n == b) ++cnt2;
}
if (cnt1 > sz / 3) rc.push_back(a);
if (cnt2 > sz / 3) rc.push_back(b);
return rc;
}
};

posted @ 2015-08-26 03:31  影湛  阅读(127)  评论(0)    收藏  举报