You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求时间复杂度O(n)的替代算法:判断整数数组是否存在重复三次的元素

寻找O(n)时间复杂度的数组元素重复三次判断算法

你的三重循环实现时间复杂度为O(n³),效率极低,而且代码中存在明显bug——第三层循环的循环变量写成了j++,应该是k++,这会导致逻辑错误甚至死循环。以下是几种O(n)时间复杂度的替代方案:

方案一:哈希表统计出现次数

利用哈希表(HashMap)遍历数组时统计每个元素的出现次数,一旦发现某个元素出现次数达到3次,直接返回true,无需遍历完整个数组。这种方法时间复杂度为O(n),空间复杂度为O(n),是最通用的解法。

Java实现代码:

import java.util.HashMap;
import java.util.Map;

public boolean threeEqualElements(int[] arr) {
    // 数组长度小于3时直接返回false
    if (arr == null || arr.length < 3) {
        return false;
    }
    
    Map<Integer, Integer> countMap = new HashMap<>();
    for (int num : arr) {
        // 统计当前元素出现次数,默认值为0
        int currentCount = countMap.getOrDefault(num, 0) + 1;
        countMap.put(num, currentCount);
        
        // 提前返回,优化性能
        if (currentCount >= 3) {
            return true;
        }
    }
    return false;
}

方案二:数组计数(仅适用于元素范围已知的场景)

如果数组中的整数元素范围明确(比如限定在[-1000, 1000]),可以用数组替代哈希表,进一步降低哈希表的常数开销,时间复杂度同样为O(n)。

示例代码(假设元素范围为0到1000):

public boolean threeEqualElements(int[] arr) {
    if (arr == null || arr.length < 3) {
        return false;
    }
    
    int[] countArr = new int[1001];
    for (int num : arr) {
        countArr[num]++;
        if (countArr[num] >= 3) {
            return true;
        }
    }
    return false;
}

注意事项

  • 哈希表方案适用于所有整数数组场景,无需限制元素范围;
  • 若追求极致空间优化,且数组允许修改,可以先排序(时间复杂度O(n log n))再遍历找连续三个相同元素,但这种方法不符合O(n)的时间要求,仅作扩展参考。

内容的提问来源于stack exchange,提问作者rana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 17:17:34