You need to enable JavaScript to run this app. C++求解1~n范围重复与缺失数字代码报错排查
优惠活动
大模型
产品
解决方案
定价
更多

C++求解1~n范围重复与缺失数字代码报错排查

代码错误点

  • 动态内存分配错误:int *res=new int(2); 语法含义是分配1个int类型内存并赋值为2,并非分配长度为2的int数组。访问res[1]属于越界访问非法内存,值不确定,这是你得到输出0的直接原因之一。
  • 哈希数组长度不足:你定义的int hsh[n]长度为n,下标范围为0n-1,而你需要统计1n的数字出现次数,当数字等于n时,hsh[arr[i-1]]会越界访问,无法正确统计最大值n的出现次数,也无法检测到n是否缺失,这是你测试用例中14未被识别为缺失值的核心原因。
  • 变量未初始化:int mini; 未赋值就调用min(mini,i)属于未定义行为,取值完全随机。且本题保证1~n范围内仅有1个重复值,mini的最小比较逻辑完全多余。
  • 合规性问题:C++标准不支持变长数组int hsh[n]写法,仅部分编译器做了扩展支持,代码兼容性差。

修复后代码

int *findTwoElement(int *arr, int n) {
    // 正确分配长度为2的动态数组
    int *res = new int[2];
    // 哈希数组长度设为n+1,覆盖1~n所有下标,初始化全为0
    int *hsh = new int[n+1]();
    
    for(int i = 0; i < n; i++) {
        hsh[arr[i]]++;
    }
    
    for(int i = 1; i <= n; i++) {
        if(hsh[i] > 1) {
            res[0] = i;
        }
        if(hsh[i] == 0) {
            res[1] = i;
        }
    }
    // 释放临时哈希数组,避免内存泄漏
    delete[] hsh;
    return res;
}

注意:调用方使用完返回的res数组后,需要调用delete[] res释放内存,避免内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 11:06:00