229. 求众数 II

Posted yuhong1103

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了229. 求众数 II相关的知识,希望对你有一定的参考价值。

 1 class Solution 
 2 {
 3 public:
 4     vector<int> majorityElement(vector<int>& nums) 
 5     {
 6         vector<int> res;
 7         if (nums.empty()) return res;
 8         // 初始化两个候选人candidate,和他们的计票
 9         int cand1 = nums[0], count1 = 0;
10         int cand2 = nums[0], count2 = 0;
11 
12         // 摩尔投票法,分为两个阶段:配对阶段和计数阶段
13         // 配对阶段
14         for (int num : nums) 
15         {
16             // 投票
17             if (cand1 == num) 
18             {
19                 count1++;
20                 continue;
21             }
22             if (cand2 == num) 
23             {
24                 count2++;
25                 continue;
26             }
27 
28             // 第1个候选人配对
29             if (count1 == 0) 
30             {
31                 cand1 = num;
32                 count1++;
33                 continue;
34             }
35             // 第2个候选人配对
36             if (count2 == 0) 
37             {
38                 cand2 = num;
39                 count2++;
40                 continue;
41             }
42 
43             count1--;
44             count2--;
45         }
46 
47         // 计数阶段
48         // 找到了两个候选人之后,需要确定票数是否满足大于 N/3
49         count1 = 0;
50         count2 = 0;
51         for (int num : nums) 
52         {
53             if (cand1 == num) count1++;
54             else if (cand2 == num) count2++;
55         }
56 
57         if (count1 > nums.size() / 3) res.push_back(cand1);
58         if (count2 > nums.size() / 3) res.push_back(cand2);
59 
60         return res;
61     }
62 };

 

以上是关于229. 求众数 II的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 229.求众数II

229. 求众数 II

229 Majority Element II 求众数 II

229. 求众数 II摩尔投票法的扩展

LeetCode 229 求众数 II[Map] HERODING的LeetCode之路

229. 求众数 II-摩尔投票法