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
相关产品推荐
相关产品推荐

