它不适用于leetcode,但它适用于vscode——一个数组问题

Posted

技术标签:

【中文标题】它不适用于leetcode,但它适用于vscode——一个数组问题【英文标题】:It doesn't work on leetcode but it works on vscode -- an array problem 【发布时间】:2021-05-07 07:27:16 【问题描述】:

更新:它不起作用,因为我没有在函数内部设置returnSize,并且 leetcode 期望该参数具有 Jerry Jeremiah 在 cmets 中所说的值。

问题出在:给定数组 nums 由 2n 元素组成,形式为 [x1,x2,...,xn,y1,y2,...,yn]

[x1,y1,x2,y2,...,xn,yn]的形式返回数组

int* shuffle(int* nums, int numsSize, int n, int* returnSize) 
    int *answer = (int*) malloc(numsSize * sizeof(int));
    int a,k,i;
    
    for (i = 0, k = n, a = 0; i < numsSize-1; i += 2, k++, a++) 
        answer[i] = nums[a];
        answer[i+1] = nums[k];
    
    return answer;

首先我认为我无法正确分配内存,但我认为并非如此。

我已经尝试了其他几种方法来解决这个问题,但输出都是一样的,我不知道为什么?

即使代码相同,我的输出对于相同的测试也会有所不同。其中一些是:[]、]、[2,1]

我不是在寻找解决问题的另一种方法。我只是想知道为什么我得到这些输出 leetcode 但不在我的 vscode 中。

你们能帮我弄清楚吗?

【问题讨论】:

尝试在调试器中单步调试代码。此外,请在与他人共享之前格式化您的代码(为了您自己的理智,TBH) 按要求重新格式化。 你没有在函数内部设置 returnSize 并且 leetcode 可能期望该参数有一个值。 哦.. 成功了。谢谢! @Dankindonut,您将 returnSize 设置为什么?我也有类似的问题。 【参考方案1】:

'\0' 添加到内存末尾可能会有所帮助

int* answer=(int*)malloc((numsSize + 1) * sizeof(int))
answer[(numsSize + 1)] = '\0';

【讨论】:

谢谢你的回答,但是当我尝试它时,编译器给出了堆缓冲区溢出错误。 它是一个 int 数组 - 不是一个 char 字符串。 是的,我知道你需要分配 * returnSize = answerSize; int 不需要 '\0'

以上是关于它不适用于leetcode,但它适用于vscode——一个数组问题的主要内容,如果未能解决你的问题,请参考以下文章

AJAX 不适用于移动设备,但它适用于 Chrome 开发者工具

VSCode 中的 Flutter beta 热重载适用于 Web,但不适用于 iOS 和 Android(适用于 Android Studio)

此 JS/jQuery 代码适用于 Firefox,但不适用于 Chrome

Ajax 调用仅适用于表的第一行,不适用于下一行

日期选择器 html5 标记不适用于 Mozilla、IE 浏览器。但它仅适用于 Chrome

JSON仅适用于Debug模式,但不适用于android中的apk文件