You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现productOfPrevious方法时输出数组全为0的问题排查求助

问题分析与修复

你遇到的问题根源在于乘积变量的初始化逻辑错误,咱们一步步拆解清楚:

核心问题

  1. 你把product初始化为0,而且每次外层循环还会重新将它重置为0——数学里0乘以任何数结果都是0,不管内层循环怎么乘,最终product都会保持0,自然返回数组全是0。
  2. 另外你的嵌套循环属于冗余逻辑,时间复杂度是O(n²),其实可以优化成更高效的O(n)解法。

修复后的代码(先解决基础问题)

先把初始化的问题修正,同时优化循环逻辑:

public int[] productPrevious (int[] arr){
    int[] retArr = new int[arr.length];
    int product = 1; // 乘法的单位元是1,初始值要设为1而非0
    for (int i = 0; i < arr.length; i++){
        product *= arr[i]; // 直接用前一步的乘积乘当前元素,无需嵌套循环
        retArr[i] = product;
    }
    return retArr;
}

这样当输入{1,2,3,4,5}时,就能得到你期望的{1,2,6,24,120}了。

为什么去掉嵌套循环?

原来的嵌套循环每次都从0到i重新计算乘积,做了大量重复工作。上面的写法只需要一次遍历:每一步的乘积都是前一步的乘积乘以当前元素,完全符合“当前元素及其之前所有元素的乘积”的需求,效率提升明显。

边界情况提醒

如果输入数组是空的,或者包含0,这个逻辑也能正常工作:比如输入{2,0,3},会返回{2,0,0},完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 14:48:10