给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
分析:
题解一:
第一反应是用”桶排序”,就是把每个数出现的次数记录下来,最后根据众数出现次数限制找出该众数
利用 Map(key,value) 的性质,key 用来保存数组值,value 用来保存次数
class Solution {
public int majorityElement(int[] nums) {
int len = nums.length;
if (len == 1)
return nums[0];
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < len; i++) {
if (!map.containsKey(nums[i])) {
map.put(nums[i], 1);
} else {
int times = map.get(nums[i]);
map.put(nums[i], times + 1);
if (len / 2 < times + 1)
return nums[i];
}
}
return 0;
}
}
题解二:
既然众数是出现次数最多的数,那我就每次遇到一个数计数器加 1,遇到其他的数计数器减 1,当计数器减到 0,说明现在保存的数肯定不是众数,重新保存
class Solution {
public int majorityElement(int[] nums) {
int result = nums[0];
int count = 0;
for (int i : nums) {
if (count == 0) {
result = i;
count++;
} else {
if (result == i)
count++;
else
count--;
}
}
return result;
}
}