169. 求众数
LeetCode169. Majority Element摩尔投票算法
题目描述
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
摩尔投票算法
给定一个 int 型数组,找出该数组中出现次数大于数组长度一半的 int 值。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
Java 实现
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class Solution {
// Sorting
public static int majorityElement1(int[] nums) {
Arrays.sort(nums);
return nums[nums.length / 2];
}
// Hashtable
public static int majorityElement2(int[] nums) {
Map<Integer, Integer> myMap = new HashMap<Integer, Integer>();
int ret = 0;
for (int num : nums) {
if (!myMap.containsKey(num)) {
myMap.put(num, 1);
} else {
myMap.put(num, myMap.get(num) + 1);
}
if (myMap.get(num) > nums.length / 2) {
ret = num;
break;
}
}
return ret;
}
// Moore voting algorithm
public static int majorityElement3(int[] nums) {
int count = 0, ret = 0;
for (int num : nums) {
if (count == 0) {
ret = num;
}
if (num != ret) {
count--;
} else {
count++;
}
}
return ret;
}
}
参考资料