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

LeetCode 217: Contains Duplicate Java解法超时问题求助

LeetCode 217: Contains Duplicate 超时问题分析

你的代码逻辑本身是正确的,但时间复杂度不符合题目对大数据量的要求,导致无法通过大测试用例:

  • 核心问题出在ArrayList的contains()方法:它会逐个遍历列表中的元素进行匹配,每次调用的时间复杂度是O(n)
  • 外层循环遍历整个数组也是O(n),所以整体时间复杂度是O(n²)。当测试用例的数组规模很大(比如包含十万甚至百万级元素)时,总运算量会达到亿级甚至更高,直接触发时间限制超时

优化方案:使用HashSet降低时间复杂度

HashSet基于哈希表实现,它的contains()和add()方法平均时间复杂度都是O(1),用它替代ArrayList后,整体时间复杂度降到O(n),可以轻松通过所有测试用例:

class Solution {
    public boolean containsDuplicate(int[] nums) {
        HashSet<Integer> numSet = new HashSet<>();
        for (int num : nums) {
            if (numSet.contains(num)) {
                return true;
            }
            numSet.add(num);
        }
        return false;
    }
}

其他可选思路

你也可以先对数组排序,再遍历检查相邻元素是否重复:

  • 排序的时间复杂度是O(nlogn),遍历是O(n),整体时间复杂度O(nlogn),虽然比HashSet的平均情况稍差,但也是可行的方案:
import java.util.Arrays;

class Solution {
    public boolean containsDuplicate(int[] nums) {
        Arrays.sort(nums);
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] == nums[i-1]) {
                return true;
            }
        }
        return false;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:32:37