【数组】169. 多数元素-数组中出现次数大于[n/2]的元素

题目:

 

 

解答:

思路:

如果我们把众数记为+1,把其他数记为-1,将它们全部加起来,显然和大于0,从结果本身我们可以看出众数比其他数多。

算法:

Boyer-Moore算法的详细步骤如下:

1)维护一个候选众数candidate和它出现的次数count。初始时,candidate可以为任意值,count为0;

2)遍历数组nums中的所有元素,对于每个元素x,在判断x之前,如果count的值为0,我们先将x的值赋值给candidate,随后我们判断x:

  A. 如果x与candidate相等,那么计数器count的值增加1;

  B. 如果x与candidate不等,那么计数器count的值减少1;

3)在遍历完成后,candidate即为整个数组的众数。

 

 1 class Solution {
 2 public:
 3     int majorityElement(vector<int>& nums) 
 4     {
 5         int curNum = nums[0];
 6         int len = nums.size();
 7 
 8         int count = 1;
 9         for (int i = 1; i < len; ++i)
10         {
11             if (count == 0)
12             {
13                 curNum = nums[i]; 
14                 count = 1;
15             }
16             else
17             {
18                 if (nums[i] != curNum) 
19                 {
20                     count--;
21                 }
22                 else 
23                 {
24                     count++;
25                 }
26             }
27         }
28 
29         return curNum;
30     }
31 };

 

posted @ 2020-05-04 16:47  梦醒潇湘  阅读(414)  评论(0)    收藏  举报