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

时间:2018-04-14 05:40:38

标签: c arrays malloc

以下代码针对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]

1 个答案:

答案 0 :(得分:1)

您的代码可以使用*returnSize指向的变量值来解释错误行为。您的输出意味着该值为0 从名称和通用目的来看,您需要找到该变量的合适值,并在使用之前通过指针returnSize写出来。
你正在使用它将mallocing返回内存加到大小为0.这使得a的任何mmember成员的任何访问都非常有问题,例如。

a[0] = -1;
a[1] = -1;

您的输出数字为零的事实可能是一个循环(未显示),只是注意returnSize == 0

我建议首先确定目标值和第一个索引的出现次数 然后通过*returnSize写下该值 然后malloc和适当大小的数组 然后使用first_index + counter填充数组,使用0到大小为1的循环。