这是问题的地址。 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]
当我点击Run Code时,一切正常,代码在我的macbook pro上正确运行,使用gcc作为编译器,gdb作为调试器。
但是,当我单击Submit Solution时,它会为测试用例1输出[0,0,3,3]。 然后我尝试将代码“free(result);”注释掉,输出[0,0,1,1,2,2,3,3,4,4]作为测试用例2.测试用例2落后测试用例1,这意味着在注释掉代码“free(result);”后传递了测试用例1.
似乎我注释掉的代码与结果无关,我的代码有什么问题?
谢谢!
答案 0 :(得分:1)
while (nums[i + 1] == nums[i]) { ... }
考虑像[1, 2, 2, 2, 2, 2]
这样的数组会发生什么。它会愉快地读到最后。
到达终点时需要停止循环:
while (i+1 < numsSize && nums[i + 1] == nums[i]) { ... }