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

C语言LeetCode两数之和:代码仅通过3个测试用例中的2个

两数之和暴力解法错误分析与修正

核心错误点

你代码里的int length = sizeof(nums) / sizeof(nums[0]);是根本问题:在函数参数里,nums是指针类型,不是数组,sizeof(nums)得到的是指针本身的字节长度(比如32位系统是4字节,64位是8字节),用这个值除以单个元素的大小,算出来的length完全不是数组的真实长度。

以测试用例[3,2,4]为例,这个错误计算会导致循环只遍历部分元素,自然找不到正确的配对,最后返回未初始化的占位值。你应该直接用题目传给你的numsSize参数,这已经是正确的数组元素个数了。

次要优化点

原来的双层循环里,ii从0开始会重复检查同一对元素(比如i=0,ii=1和i=1,ii=0),既浪费时间,还存在逻辑冗余。改成ii从i+1开始,就能避免重复,同时不用再判断i != ii,逻辑更简洁。

修正后的代码

int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
    int i, ii;
    int *Paar = (int*)malloc(2*sizeof(int));

    for(i=0; i < numsSize; i++) {
        // ii从i+1开始,避免重复检查同一对
        for(ii = i + 1; ii < numsSize; ii++) {
            if(nums[i] + nums[ii] == target) {
                Paar[0] = i;
                Paar[1] = ii;
                *returnSize = 2;
                return Paar;
            }
        }
    }
    // 没找到符合条件的配对时,规范处理内存和返回值
    *returnSize = 0;
    free(Paar);
    return NULL;
}

修正说明

  1. 用numsSize替换错误的length计算,确保循环遍历整个数组;
  2. 内层循环从i+1开始,减少循环次数,简化逻辑;
  3. 增加无结果时的处理:释放申请的内存,把returnSize设为0并返回NULL,符合LeetCode的题解要求,避免内存泄漏和返回无效值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:27:41