题目:
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:[3,2,3] 输出:3 示例 2: 输入:[2,2,1,1,1,2,2] 输出:2
思路一:
排序后找中间数,中间的数必然是占一半以上的元素
public static int findNums(int[] arr){
Arrays.sort(arr);
return arr[arr.length/2];
}
思路二:
摩尔投票法
摩尔投票算法原理:算法学习笔记(78): 摩尔投票 - 知乎
代码实现如下
public static int Moore(int[] arr){
int ret = arr[0];
int count = 1;
for (int i = 0; i < arr.length; i++) {
if(count >= 0){
if(arr[i] == ret){
count++;
}else {
count--;
}
}else {
ret = arr[i];
count = 1;
}
}
return ret;
}