33_169. 多数元素
作者:互联网
题目描述:
解题思路:
- 投票算法:
- 如果把众数记为+1,其他数记为-1,将他们全部加起来,和大于0。
- 使用candidate维护一个候选众数,和它出现的次数count
- 遍历数组中的每个元素,如果和candidate相同,则count++,如果不相同则count--
- 当count被减到0时,candidate开始换届。
- 哈希表:
- 使用HashMap来存储每个元素,以及其出现的次数
- 循环遍历哈希映射中所有的键值对,维持一个最大的值,然后返回其结果
- 排序:
- 注意该题目是大于n/2的数字为众数,对该数组进行排序,则出现在n/2位置上的数字,即是众数
代码:
投票算法
//投票算法:
class Solution {
public int majorityElement(int[] nums) {
int major = nums[0];
int count = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == major) {
count ++;
}else {
if (count > 0) {
count--;
}else{
major = nums[i];
}
}
}
return major;
}
}
哈希表
//哈希表:
class Solution {
public int majorityElement(int[] nums) {
HashMap<Integer, Integer> map = new HashMap<>();
int len = nums.length - 1;
for (int num : nums) {
if (!map.containsKey(num)) {
map.put(num, 1);
}else {
map.put(num, map.get(num) + 1);
}
}
Map.Entry<Integer, Integer> majorityEntry = null;
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
if (majorityEntry == null || entry.getValue() > majorityEntry.getValue()) {
majorityEntry = entry;
}
}
return majorityEntry.getKey();
}
}
排序
//排序:
class Solution {
public int majorityElement(int[] nums) {
Arrays.sort(nums);
return nums[nums.length / 2];
}
}
标签:count,map,nums,33,元素,int,num,169,majorityEntry 来源: https://www.cnblogs.com/forrestyu/p/16209545.html