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

LeetCode第一题Two Sum:为何必须设置returnSize为2?

LeetCode Two Sum中returnSize参数的作用及报错原因

我正在用C语言解决LeetCode第1题Two Sum,题目要求给定整数数组nums和整数target,返回两个数的下标使它们的和等于target,输入恰好有一个解且不能重复使用同一元素。

我写的代码如下:

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numsSize, int target, int* returnSize)
{
    *returnSize = 2;    /* here */
    int* result = (int*)malloc(2 * sizeof(int));
    for (int i = 0; i < numsSize; i ++)
    {
        for (int j = i + 1; j < numsSize; j ++)
        {
            if (nums[i] + nums[j] == target)
            {
                result[0] = i;
                result[1] = j;

                return result;
            }
        }
    }
    return NULL;
}

我发现如果不设置returnSize或者把它设为2以外的值,提交就会报错,但看起来returnSize和返回值无关,想知道原因。

核心原因:returnSize是给评测系统的输出参数

LeetCode的C语言题函数签名里,returnSize的作用是让你告诉调用者(也就是后台评测系统)你返回的动态分配数组的元素个数。

  1. C语言的限制导致必须用这种方式传递长度
    C语言中,函数返回的指针只指向数组的起始地址,调用者无法直接通过指针得知数组的长度。所以LeetCode设计了这个指针参数,要求你把返回数组的长度写入*returnSize,供评测系统读取。

  2. 评测系统依赖这个值处理结果
    对于Two Sum题,题目保证恰好有一个解,所以你返回的数组一定包含2个下标。评测系统会读取*returnSize的值,然后根据这个值去取你返回数组里的元素:

  • 如果你没设置*returnSize,它的值是未初始化的垃圾值,评测系统读取时会出现未定义行为(比如读取错误长度的元素,导致结果校验失败);
  • 如果设为2以外的值(比如1),评测系统只会读取数组的前1个元素,无法拿到完整的两个下标,自然会判定答案错误。
  1. 提前return也要先设置returnSize
    哪怕你在循环里找到结果就直接return,也必须先设置*returnSize = 2。因为评测系统可能在检查返回数组之前,先验证returnSize的合法性,或者依赖它来分配内存、读取数据,未正确设置的话必然触发报错。

简单来说,returnSize是你和评测系统之间的约定:你返回的数组有多长,必须通过这个参数明确告知,否则系统无法正确处理你的返回结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:03:16