题目
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例
输入:[3,2,3]
输出:3
输入:[2,2,1,1,1,2,2]
输出:2
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/majority-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法1:哈希表
本来想找道题练一下分治,结果这道题可以哈希强行做出来 emmm。。
Java实现1
class Solution {
public int majorityElement(int[] nums) {
int n=nums.length;
n=n/2;
Map<Integer, Integer> map = new HashMap<>();
for (int i=0; i<nums.length; i++){
if (!map.containsKey(nums[i])) map.put(nums[i], 1);
else map.put(nums[i], map.get(nums[i])+1);
}
for (int i=0; i < nums.length; i++){
if (map.get(nums[i]) > n) return nums[i];
}
return -1;
}
}
Java实现2
突然发现在一个 for 循环里可以搞定
class Solution {
public int majorityElement(int[] nums) {
int n = nums.length;
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < n; i++){
if (!map.containsKey(nums[i])) map.put(nums[i], 1);
else map.put(nums[i], map.get(nums[i]) + 1);
if (map.get(nums[i]) > (n / 2)) return nums[i];
}
return -1;
}
}
方法2:排序
因为最多的数大于一半,排序后取中值就是出现最多的数。
Java实现
class Solution {
public int majorityElement(int[] nums) {
int n = nums.length;
Arrays.sort(nums);
return nums[n/2];
}
}