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<int> majorityElement(vector<int>& nums) {
		vector<int> 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  影湛  阅读(110)  评论(0)    收藏  举报