以下代码针对leetcode问题 - Search for a Range(请点击查看详情)。代码的运行时复杂性尚未优化,但预计不会有一些错误。你能帮我找到bug的位置吗? 代码及其结果如下。
代码:
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* searchRange(int* nums, int numsSize, int target, int* returnSize) {
int* a = malloc(sizeof(int) * (*returnSize));
a[0] = -1;
a[1] = -1;
int i;
for(i = 0; i < numsSize && a[0] == -1; i++){
if(nums[i] == target)
a[0] = i;
}
for(int j = i+1; j < numsSize; j++){
if(nums[j] == target)
a[1] = j;
}
return a;
}
运行代码结果
您的输入
[5,7,7,8,8,10]
8
你的回答
[]
预期答案
[3,4]
答案 0 :(得分:1)
您的代码可以使用*returnSize
指向的变量值来解释错误行为。您的输出意味着该值为0
从名称和通用目的来看,您需要找到该变量的合适值,并在使用之前通过指针returnSize
写出来。
你正在使用它将mallocing返回内存加到大小为0.这使得a
的任何mmember成员的任何访问都非常有问题,例如。
a[0] = -1;
a[1] = -1;
您的输出数字为零的事实可能是一个循环(未显示),只是注意returnSize == 0
。
我建议首先确定目标值和第一个索引的出现次数
然后通过*returnSize
写下该值
然后malloc和适当大小的数组
然后使用first_index + counter
填充数组,使用0到大小为1的循环。