您的位置:首页 > 其它

LeetCode - Majority Element II

2015-07-17 14:40 369 查看


Majority Element II

 Total Accepted: 4935 Total
Submissions: 23021My Submissions

Question
 Solution 

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.

类似摩尔投票,用两个计数器,当前数字与计数器代表的数字都不同时,将两个计数器都减一

class Solution {
public:
vector<int> majorityElement(vector<int>& nums) {
int n = nums.size();
vector<int> a(2, 0), b(2, 0);
int index = 0;
for(auto x : nums){
if(b[0] == 0 || a[0] == x){
a[0] = x;
++b[0];
}
else if (b[1] == 0 || a[1] == x){
a[1] = x;
++b[1];
}
else{
--b[0];
--b[1];
}
}
vector<int> ans;
b[0] = b[1] = 0;
for(auto x : nums){
if(a[0] == x){
++b[0];
}
else if(a[1] == x){
++b[1];
}
}
if(b[0] > n / 3) ans.push_back(a[0]);
if(b[1] > n / 3) ans.push_back(a[1]);
return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 数学