给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
我的思路:用哈希表存储(元素-次数),一旦次数>n/2,则返回该元素
代码如下:
public int majorityElement(int[] nums) {
int length = nums.length;
Map map = new HashMap<>();//元素-次数
for (int i = 0; i < length; i++) {
if (!map.containsKey(nums[i])){
map.put(nums[i],1);
}else{
Integer count = map.get(nums[i]);
count++;
if (count > (length/2)){
return nums[i];
}else {
map.put(nums[i], count);
}
}
}
return nums[0];
}
官方的思路1:
如果将数组 nums 中的所有元素按照单调递增或单调递减的顺序排序,那么下标为n/2的元素(下标从 0 开始)一定是众数。
代码如下:
class Solution {
public int majorityElement(int[] nums) {
Arrays.sort(nums);
return nums[nums.length / 2];
}
}
思路2:
class Solution {
public int majorityElement(int[] nums) {
int count = 0;
Integer candidate = null;
for (int num : nums) {
if (count == 0) {
candidate = num;
}
count += (num == candidate) ? 1 : -1;
}
return candidate;
}
}



