以下代码针对一个leetcode问题 -- 搜索范围(请点击查看详情(。代码的运行时复杂性尚未优化,但预计不会有一些错误。你能帮我找到错误在哪里吗?代码及其结果如下所示。
代码:
/**
* 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]
代码可以使用 *returnSize
指向的变量的值来解释不当行为。输出意味着该值为 0。
从名称和一般用途来看,您需要找出该变量的合适值,并在使用它之前通过指针returnSize
写入它。
您正在使用它来错误地分配返回存储器,大小为 0。这使得对a
任何成员成员的任何访问都非常值得怀疑,例如
a[0] = -1;
a[1] = -1;
您的输出具有零数字的事实可能是一个循环(未显示(,它只是对returnSize == 0
进行记录。
我建议首先确定目标值和第一个索引的出现次数。
然后通过 *returnSize
写入该值。
然后是适当大小的malloc和数组。
然后用循环 0 到 size-1 填充数组,并用 first_index + counter
.