
使用哈希表统计元素频次,单次遍历即可在 o(n) 时间内判断数组中是否有任意整数出现至少三次。
使用哈希表统计元素频次,单次遍历即可在 o(n) 时间内判断数组中是否有任意整数出现至少三次。
要解决“判断整数数组中是否存在某个元素恰好(或至少)出现三次”这一问题,最直观的暴力三重循环解法时间复杂度高达 O(n³),在大规模数据下完全不可行。更优的策略是利用空间换时间:借助哈希表(如 Java 中的 HashMap)动态维护每个元素的出现次数,并在遍历过程中实时检查是否已达三次。
以下是一个高效、简洁且符合 O(n) 时间复杂度要求的实现:
import java.util.HashMap;
import java.util.Map;
public boolean ThreeEqualElements(int[] arr) {
if (arr == null || arr.length count = new HashMap();
for (int num : arr) {
int freq = count.getOrDefault(num, 0) + 1;
count.put(num, freq);
if (freq == 3) {
return true;
}
}
return false;
}
该算法仅需一次顺序扫描:对每个元素更新其计数,并在计数达到 3 的第一时间返回 true,无需等待全部统计完成,进一步优化了平均性能。空间复杂度为 O(k),其中 k 是数组中不同元素的个数,最坏情况下为 O(n)。
⚠️ 注意事项:
- 原题代码中存在严重语法错误(内层循环变量误写为 j++ 而非 k++),会导致无限循环或 ArrayIndexOutOfBoundsException;
- 本解法判断的是“出现至少三次”,若题目严格要求“恰好三次”,则需在遍历结束后再扫描哈希表筛选 value == 3 的键值对;
- 对于空数组或长度小于 3 的数组,可提前返回 false,避免无效哈希操作,提升鲁棒性。
综上,哈希计数法以清晰的逻辑、线性的运行效率和良好的可扩展性,成为此类频次判定问题的标准解法。










