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

C++实现containsDuplicate判断数组重复元素时返回值异常问题

代码问题定位

你的代码存在两个核心逻辑错误,直接导致运行结果不符合预期:

  • 内层循环比对逻辑错误:内层循环j固定从索引1开始,没有跳过当前外层循环的i位置。当i≥1时,j遍历过程中必然会走到j=i的位置,此时是同一个数组元素和自身做比较,会被误判为存在重复值,这就是所有元素唯一时无法正确返回false的根本原因。
  • 外层循环遍历范围不全:外层循环终止条件写为i < nums.size()/2,仅遍历了数组前半段的元素,后半段元素从来不会作为基准值和其他元素做比对,如果重复元素全部落在数组后半段,会直接漏判。
修正方案

1. 原暴力思路修正

如果要保留两层循环的暴力比对逻辑,只需要修正两个循环的边界:外层遍历全部元素,内层从i的下一个位置开始遍历(避免和自身比较、避免重复比对),发现重复可以直接返回结果,不需要额外设置标记位:

bool containsDuplicate(vector<int>& nums) {
    for (int i = 0; i < nums.size(); i++) {
        for (int j = i + 1; j < nums.size(); j++) {
            if (nums[i] == nums[j]) {
                return true;
            }
        }
    }
    return false;
}

注意:该方案时间复杂度为O(n²),在数组长度较大时运行效率很低。

2. 更优的哈希集合实现

用哈希集合记录已经遍历过的元素,遍历一次数组即可完成判断,时间复杂度为O(n),是常规场景下更常用的实现:

#include <unordered_set>
using namespace std;

bool containsDuplicate(vector<int>& nums) {
    unordered_set<int> exist;
    for (int num : nums) {
        if (exist.count(num)) {
            return true;
        }
        exist.insert(num);
    }
    return false;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:03:20