You need to enable JavaScript to run this app. Leetcode 1089 Duplicate Zeros 算法输出异常bug排查
优惠活动
大模型
产品
解决方案
定价
更多

Leetcode 1089 Duplicate Zeros 算法输出异常bug排查

Bug分析
  • 第一个核心错误:第一次遍历的边界判断逻辑完全失效,你写的if(item == arr.length)永远不可能触发,因为循环的终止条件是item <= arr_length,而arr_length初始值是arr.length - 1,后续还会不断递减,item永远不可能等于arr.length。
  • 这个错误导致你计算的possible_duplicates(需要复写的零的数量)和arr_length(原数组中最后一个需要保留的元素索引)完全错误,最终第二次倒序赋值的时候,把原数组前面的非零元素错误移位到了后面的位置,就出现了你拿到的[8,8,4,5,0,0,0,0]错误结果。
修正后的代码
class Solution {
    public void duplicateZeros(int[] arr) {
        int possible_duplicates = 0;
        int n = arr.length;
        int left = 0;
        // 第一次遍历:计算需要复写的零的数量,以及最后一个保留元素的索引
        while (left + possible_duplicates < n) {
            if (arr[left] == 0) {
                // 边界情况:当前零刚好占最后一个位置,无法复写
                if (left + possible_duplicates == n - 1) {
                    arr[n - 1] = 0;
                    n--;
                    break;
                }
                possible_duplicates++;
            }
            left++;
        }
        int last = left - 1;
        // 第二次倒序遍历:原地赋值
        for (int i = last; i >= 0; i--) {
            if (arr[i] == 0) {
                arr[i + possible_duplicates] = 0;
                possible_duplicates--;
                arr[i + possible_duplicates] = 0;
            } else {
                arr[i + possible_duplicates] = arr[i];
            }
        }
    }
}
验证结果

输入测试用例[8,4,5,0,0,0,0,7],运行修正后代码可得到预期输出[8,4,5,0,0,0,0,0]。

内容的提问来源于stack exchange,提问作者user8426766

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 06:27:02