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

标签 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]

最佳答案

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

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

事实上,您的输出有零个数字,这可能是一个循环(未显示),它只是简单地记录 returnSize == 0

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

关于c - 修复用于解决搜索范围的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49828326/

相关文章:

c - 在链表末尾插入

c# - C# 中的字节数组到字符串

c - 内存分配释放

使用 malloc 将 token 复制到二维数组

c - 使用 vsprintf 将字符串添加到另一种格式字符串的有效方法

c# - 拦截与获取Windows版本相关的API调用

C 程序未在 Objective-C 编译器上正确编译

java - 如何将包含整数的 ArrayList 转换为原始 int 数组?

javascript - NodeJS 中是否有任何简单的方法可以将多部分/表单数据转换为数组?

c - 瓦尔格林德 C : Argument of function has a fishy (possibly negative) value