题目链接
解题思路
- HashMap:遍历数组,将每一个数字出现的次数保存到HashMap中,然后返回众数即可
- 摩尔投票:
- 众数
ans
:初始值设置为数组的第一个元素 - 票数
votes
:表示当前众数ans
所获得的票数,初始值设置为0 - 遍历,对每个元素
num
是否为0
,如果是0
则将当前遍历的元素num
设置为众数ans
- 判断
num
是否为众数ans
- 排序:对数组进行排序,那么众数一定是在中间
AC代码
class Solution {
public int majorityElement(int[] nums) {
Map<Integer, Integer> map = new HashMap<>();
int len = nums.length;
for (int num : nums) {
if (map.containsKey(num))
map.put(num, map.get(num) + 1);
else
map.put(num, 1);
if (map.get(num) > len / 2)
return num;
}
return 0;
}
}
class Solution {
public int majorityElement(int[] nums) {
int ans = nums[0];
int votes = 0;
for (int num : nums) {
if (votes == 0)
ans = num;
if (ans == num)
votes++;
else
votes--;
}
return ans;
}
}
class Solution {
public int majorityElement(int[] nums) {
Arrays.sort(nums);
return nums[nums.length / 2];
}
}