169. 多数元素
统计法
使用 map 统计每个元素的出现次数
时间复杂度:O(n),空间复杂度:O(n)
执行用时:11 ms, 在所有 Java 提交中击败了26.13%的用户 内存消耗:43.8 MB, 在所有 Java 提交中击败了78.06%的用户
class Solution {
public int majorityElement(int[] nums) {
if (nums.length == 0) return -1;
Map<Integer, Integer> map = new HashMap<>();
for (int num : nums) {
map.put(num, map.getOrDefault(num, 0) + 1);
}
Map.Entry<Integer, Integer> majorityEntry = null;
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
if (majorityEntry == null || majorityEntry.getValue() < entry.getValue())
majorityEntry = entry;
}
return majorityEntry.getKey();
}
}
排序法
题目说明了众数出现次数大于 n/2 所以排序后下标为 n/2 的元素一定是众数
时间复杂度:O(nlogn),空间复杂度:跟排序算法有关
执行用时:2 ms, 在所有 Java 提交中击败了61.25%的用户 内存消耗:43.9 MB, 在所有 Java 提交中击败了73.21%的用户
class Solution {
public int majorityElement(int[] nums) {
Arrays.sort(nums);
return nums[nums.length / 2];
}
}