我尝试在在线编程平台 LeetCode 上解决一道 C 编程题 Two Sum 我无法返回整数指针大小。
问题: 给定一个整数数组,返回两个数字的索引,使它们加起来等于一个特定的目标。您可能会假设每个输入都只有一个解决方案,并且您可能不会两次使用相同的元素。
例子:
给定 nums = [2, 7, 11, 15], target = 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]
,但实际输出是]
”
最佳答案
该函数的接口(interface)旨在提供两部分结果,即数组及其大小。
您不应该通过覆盖 returnSize
来返回数组。
您应该通过将返回数组的大小写入指针 returnSize
引用的 int 变量来返回返回数组的大小(并可能检查它是否不是 NULL 指针)。
数组(即新分配的指针)应该通过 return
返回,您当然会这样做。但是通过覆盖返回参数指针来这样做是间接导致这里出现问题的原因。 (需要一个 mre 来追踪观察到的问题。)
顺便说一句,我只是通过看到您忽略并覆盖了一个参数(指针)而发现了这一点。如果那是正确的,那么函数的接口(interface)将是低效的。情况可能如此,但通常不是为了挑战。
关于c - 问题中函数无法返回 returnSize 数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57883375/