求众数

Posted seedss

tags:

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

给定一个大小为 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在众数。

技术图片

 

 

 方式一:将数组排序,取有序数组最中间的那个元素就一定是众数。(实现比较简单,不做赘述)

方法二:摩尔投票法。选取取第一个元素为target,并计数器置为1,顺序遍历数组元素,当遇到相同的元素,计数器加1;遇到不同元素时,计数器减1,当计数器减为0时,将下一个元素作为选取target,最后剩下的target元素就一定为众数。

 1  public static int getMaxNums(int[] arr) {
 2         if (arr == null || arr.length == 0) {
 3             return -1;
 4         }
 5         int target = arr[0];
 6         int count = 1;
 7         for (int i = 1; i < arr.length; i++) {
 8             if (target == arr[i]) {
 9                 count++;
10             } else {
11                 count--;
12                 if (count == 0) {
13                     target = arr[i];
14                     count = 1;
15                 }
16             }
17         }
18         return target;
19     }

 

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

leetcode-169求众数

快乐水题229. 求众数 II

快乐水题229. 求众数 II

求众数

求众数

169. 求众数