思路:
- 利用两个变量分别保存可能满足条件的数
- 并记录其对应的个数
- 若当前数与两个变量保存的数都不同,则变量对应的个数都减1
- 拓展:找出出现次数超过 [ n/k ] 次:用k-1个变量保存可能满足条件的数及对应的个数
class Solution {
public:
vector<int> majorityElement(vector<int>& nums) {
int r1, r2, c1 = 0, c2 = 0; //r1,r2:两个篮子中保存的数, c1, c2:对应的个数
for(auto item:nums)
{
if(c1 && item==r1) c1++;
else if(c2 && item==r2) c2++;
else if(!c1) r1=item, c1++;
else if(!c2) r2=item, c2++;
else c1--, c2--;
}
vector<int> res;
c1=0, c2=0;
for(auto item:nums)
{
if(item == r1) c1++;
else if(item == r2) c2++;
}
int n = nums.size();
if(c1 > n/3) res.push_back(r1);
if(c2 > n/3) res.push_back(r2);
return res;
}
};