问题描述:
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.
代码如下:20ms
class Solution {
public:
vector<int> majorityElement(vector<int>& nums) {
vector<int> res;
int a=0,b=0;
int ca=0,cb=0;
int size = nums.size();
for(int i = 0;i<size;i++){
if(ca==0){
a = nums[i];
}else if(cb == 0){
b = nums[i];
}
if(nums[i]==a)
ca++;
else if(nums[i]==b)
cb++;
else
{
ca--;
cb--;
}
}
ca = 0;cb = 0;
for(int i = 0;i<size;i++){
if(nums[i]==a)
ca++;
else if(nums[i]==b)
cb++;
}
if(ca>size/3)
res.push_back(a);
if(cb>size/3)
res.push_back(b);
return res;
}
};