前言
用Java来求一个数组的众数,可使用HashMap、栈等数据结构完成。
一、例题、解答
1、例题
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2
2、解答
A、HashMap
用HashMap快速解题,记录每个元素出现的个数,如果个数大于 len / 2 ,认为其就是众数。
public int majorityElement(int[] nums) {
//Hash Map快速解题
//用map记录num的长度,然后判断它是否大于len/2
Map<Integer, Integer> record = new HashMap<>();
int len = nums.length;
for (int i = 0; i < len; i++) {
int n = record.getOrDefault(nums[i], 0) + 1;
if (n > len / 2)
return nums[i];
record.put(nums[i], n);
}
return 0;
}
B、排序
对于数组,可对其排序,而众数一定在中间。
public int majorityElement2(int[] nums) {
//排序,值必然在中间
Arrays.sort(nums)