c - 修复用于解决搜索范围的代码



以下代码针对一个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 .

最新更新