首页 > 解决方案 > 函数不能返回returnSize数组中的元素的问题

问题描述

我试图在在线编码平台 LeetCode 中解决一个 C 编码问题的两个和我无法返回整数指针大小。

问题:给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。您可能会假设每个输入都只有一个解决方案,并且您可能不会两次使用相同的元素。

例子:

给定 nums = [2, 7, 11, 15],目标 = 9,

因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]。

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    int i,j,sum=0,n1=0,n2=0,sz=1;
    int *re;
    re = (int*)malloc(sizeof(returnSize));

    for(i=0;i<numsSize;i++){
        
         if(sum==target){
                break;
         }

         n1 = i;
         for(j=i+1;j<numsSize;j++){
              sum = nums[i]+nums[j];
            
              if(sum==target){
                   n2 = j;
                   re[0] = n1;
                   re[1] = n2;
                   break;
              }
         }  
    }
    
    return re;
}

“我希望 , , 的输出nums = [2, 7, 11, 15]target = 9[0, 1]但实际输出是]”</p>

标签: carraysloopsfor-looppointers

解决方案


该函数的接口旨在提供两部分结果,即数组及其大小。
您不应该通过覆盖来返回数组returnSize
您应该通过将返回数组的大小写入指针引用的 int 变量来返回它returnSize(并且可能检查它是否不是 NULL 指针)。

数组(即新分配的指针)应该通过返回return,你当然会这样做。但是通过覆盖返回参数指针来做到这一点是间接导致问题的原因。(将需要一个mre来跟踪观察到的问题。)

顺便说一句,我只是通过看到您忽略并覆盖了其中一个参数,即指针而发现了这一点。如果这是正确的,那么函数的接口将是低效的。情况可能是这样,但通常不是为了挑战。


推荐阅读