给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
我的思路:用哈希表存储(元素-次数),一旦次数>n/2,则返回该元素
代码如下:
public int majorityElement(int[] nums) { int length = nums.length; Map<Integer, Integer> 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;
}
}