一直在做一个leetcode问题,应该很简单,但似乎找不到我的代码中的错误。这个想法是,给定一个整数数组nums和一个目标数,我用两个nums索引填充一个int* 数组,总和是那个目标整数。
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
int* arrInd = (int *)malloc(2 * sizeof(int));
for (int i = 0; i < numsSize; i++) {
for (int counter = i + 1; counter < numsSize; counter++) {
if (nums[i] + nums[counter] == target) {
arrInd[0] = i;
arrInd[1] = counter;
return arrInd;
}
}
}
return NULL;
}
字符串
然而,当运行一个目标为9的测试用例[2,7,11,15]时,正确的返回数组应该是[0,1],但我的代码总是返回[]。请有人解释一下。
1条答案
按热度按时间hmmo2u0o1#
leetcode测试床几乎肯定会假设你会将返回数组的大小存储在
*returnSize
中。因为你没有这样做,而且它可能是预先置零的,所以它认为数组是空的,不管你在里面放什么(因为C动态分配的数组没有自己的大小概念,可以用任何公共API查询,你必须传递指向数组的指针和大小)。只需添加:
字符串
在
return arrInd;
之前。另外,为了避免失败时的内存泄漏,在
return NULL;
之前添加free(arrInd);
。