229. Majority Element II求众数II

网址:https://leetcode.com/problems/majority-element-ii/

参考:https://blog.csdn.net/u014248127/article/details/79230221

摩尔投票算法( Boyer-Moore Voting Algorithm)

 1 class Solution {
 2 public:
 3     vector<int> majorityElement(vector<int>& nums) {
 4         vector<int> ans;
 5         // 分别是候选人a,候选人b,以及a,b的票数
 6         int ca = 0, cb = 0, a = 0, b = 0;
 7         for(int i : nums)
 8         {
 9             if(ca == i) // 如果i和候选人a是同一个,其票数加一
10                 a++;
11             else if(cb == i) // 同理
12                 b++;
13             else if(!a) // 如果a的票数为0,说明ca是空出来的。要把ca更新为i
14             {
15                 ca = i;
16                 a++;
17             }
18             else if(!b) // 同理
19             {
20                 cb = i;
21                 b++;
22             }
23             else // 出现了三足鼎立的情况,我们把三人的票数都减一。i就代表第三个人,它的默认票数是1
24             {
25                 a--;
26                 b--;
27             }
28         }
29         
30         // 判断候选人是否是符合要求的结果
31         a = 0;
32         b = 0;
33         for(int i : nums)
34         {
35             if(i == ca)
36                 a++;
37             else if(i == cb)
38                 b++;
39         }
40         // 与题目要求匹配
41         if(a > nums.size()/3)
42             ans.push_back(ca);
43         if(b > nums.size()/3)
44             ans.push_back(cb);
45         
46         return ans;
47     }
48 };

原文地址:https://www.cnblogs.com/tornado549/p/10756812.html