我试图解决一个C编码问题两个和在线编码平台LeetCode我无法返回整数指针大小。
问题:给定一个整数数组,返回两个数的索引,使它们相加得到一个特定的目标。你可以假设每个输入只有一个解,并且你不能使用同一个元素两次。
示例:
给定数值=[2,7,11,15],目标值= 9,
因为数字[0]+数字[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]
,但实际输出为]
3条答案
按热度按时间kulphzqa1#
该函数的接口设计为提供两部分结果,即数组及其大小。
不应通过覆盖
returnSize
来返回数组。您应该通过将返回数组的大小写入指针
returnSize
所引用的int变量来返回该数组的大小(可能还要检查它是否为NULL指针)。数组(即新的错位指针)应该通过
return
返回,当然您也是这样做的,但是通过覆盖返回参数指针来执行此操作会间接导致此处的问题(需要使用mre来跟踪观察到的问题)。顺便说一句,我发现这只是因为你忽略并覆盖了一个参数,指针,如果这是正确的,那么函数的接口将是低效的,这是可能的,但通常不是挑战。
5f0d552i2#
我无法重现提供的数组的问题。但无论如何,函数是不正确的。
代替此语句(其中malloc调用的参数没有意义)
应该有
尽管参数
returnSize
是多余的,因为根据您的描述,数组具有等于2的固定大小。此外,存在未使用的变量
sz=1
该函数可以调用未定义的行为,因为在
target
等于0
的情况下,动态分配的数组未被初始化并且具有不确定的值,因为存在循环退出。不需要动态分配数组,可以返回两个元素的结构。
第一个参数应使用限定符
const
声明。该函数可以写得更简单、更清晰和可读性更强。
程序输出为
vmdwslir3#
试试这个: