Note:
开两个记录的变量,记录当前出现最多的数字,枚举数组,当前数字是其中一个,就记录++
如果不是,那么就由两个分别拿出来一个跟他抵消掉
如果两个都是0了,选择其中一个赋值并且记录为1
代码如下:
class Solution {
public:
vector<int> majorityElement(vector<int>& nums) {
int n1, n2, c1 = 0, c2 = 0;
for(auto x: nums)
if(c1 && x == n1) c1 ++;
else if(c2 && x == n2) c2 ++;
else if(!c1) n1 = x, c1 = 1;
else if(!c2) n2 = x, c2 = 1;
else c1 --, c2 --;
int n = nums.size() / 3;
c1 = 0, c2 = 0;
for(auto x: nums)
if(x == n1) c1 ++;
else if(x == n2) c2 ++;
vector<int> ans;
if(c1 > n) ans.push_back(n1);
if(c2 > n) ans.push_back(n2);
return ans;
}
};