【问题标题】:It doesn't work on leetcode but it works on vscode -- an array problem它不适用于leetcode,但它适用于vscode——一个数组问题
【发布时间】: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 设置为什么?我也有类似的问题。

标签: arrays dynamic-memory-allocation


【解决方案1】:

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

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

【讨论】:

  • 谢谢你的回答,但是当我尝试它时,编译器给出了堆缓冲区溢出错误。
  • 它是一个 int 数组 - 不是一个 char 字符串。
  • 是的,我知道你需要分配 * returnSize = answerSize; int 不需要 '\0'
猜你喜欢
  • 2021-03-21
  • 2022-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 2017-05-08
  • 2020-09-13
  • 1970-01-01
相关资源
最近更新 更多