求众数
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ 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 }