gpt4 book ai didi

c - 为什么我在 leetcode 上的 C 代码在运行代码和提交之间有不同的行为?

转载 作者:行者123 更新时间:2023-11-30 15:07:12 25 4
gpt4 key购买 nike

这是问题的地址。 https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii/

这是我的 C 代码:

int removeDuplicates(int* nums, int numsSize) {
int* result;
int result_pointer = 0;
int allow_appearance = 2;
int appeared_number;
int i;
if (0 == numsSize) {
return 0;
}
result = (int*)malloc(numsSize * sizeof(int));
for (i = 0; i < numsSize; i++) {
appeared_number = 1;
result[result_pointer] = nums[i];
result_pointer += 1;
while (nums[i + 1] == nums[i]) {
i += 1;
if (appeared_number < allow_appearance) {
result[result_pointer] = nums[i];
result_pointer += 1;
appeared_number += 1;
}
}
}
for (i = 0; i < result_pointer; i++) {
nums[i] = result[i];
}
free(result);
return result_pointer;
}

测试数据:测试用例1:[0, 0, 0, 0, 3](第158种情况)测试用例2:[0,0,1,1,1,2,2,2,3,3,4](第163个用例)

正确输出:对于测试用例 1:[0,0,3]对于测试用例 2:[0,0,1,1,2,2,3,3,4]

当我单击“运行代码”时,一切正常,代码在我的 macbook pro 上正确运行,使用 gcc 作为编译器,gdb 作为调试器。

但是,当我单击“提交解决方案”时,它会为测试用例 1 输出 [0,0,3,3]。然后我尝试注释掉代码“free(result);”,它为测试用例2输出[0,0,1,1,2,2,3,3,4,4]。测试用例2落后测试用例1,即注释掉代码“free(result);”后测试用例1通过。

我注释掉的代码好像和结果没有关系,我的代码有什么问题吗?

谢谢!

最佳答案

while (nums[i + 1] == nums[i]) { ... }

考虑像 [1, 2, 2, 2, 2, 2] 这样的数组会发生什么。它会很高兴地读到最后。

到达末尾时需要停止循环:

while (i+1 < numsSize && nums[i + 1] == nums[i]) { ... }

关于c - 为什么我在 leetcode 上的 C 代码在运行代码和提交之间有不同的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38409836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com