第十题(HashMap)使用Java完成,给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。例:输入:nums = [2,2,1,1,1,2,2]输出:2
时间: 2024-08-13 18:05:27 浏览: 68
java-leetcode面试题解哈希表第219题存在重复元素II-题解.zip
在 Java 中,我们可以使用 HashMap 和一个计数器来解决这个问题。HashMap 的特性是能够快速插入和查找元素,这正是我们用来统计元素出现次数的理想工具。以下是使用 Java 实现这个算法的一个示例:
```java
import java.util.HashMap;
public class MajorityElement {
public int majorityElement(int[] nums) {
// 创建一个 HashMap 来存储每个元素及其出现次数
HashMap<Integer, Integer> countMap = new HashMap<>();
// 遍历数组
for (int num : nums) {
// 如果元素已经在 map 中,增加计数
if (countMap.containsKey(num)) {
countMap.put(num, countMap.get(num) + 1);
} else {
// 否则,初始化计数为 1
countMap.put(num, 1);
}
}
// 初始化多数元素的候选者为第一个元素
int candidate = nums;
int majorityCount = 0;
// 遍历 map,找到出现次数大于 n/2 的元素
for (int key : countMap.keySet()) {
int value = countMap.get(key);
if (value > nums.length / 2) {
majorityCount = value;
candidate = key;
break; // 一旦找到,就停止遍历
}
}
// 再次遍历数组,确认候选者是否确实是多数元素
int count = 0;
for (int num : nums) {
if (num == candidate) {
count++;
}
}
return count == majorityCount ? candidate : -1; // 如果计数等于多数次数,返回多数元素,否则返回-1(表示没有找到)
}
}
```
阅读全文