Java实现productOfPrevious方法时输出数组全为0的问题排查求助
问题分析与修复
你遇到的问题根源在于乘积变量的初始化逻辑错误,咱们一步步拆解清楚:
核心问题
- 你把
product初始化为0,而且每次外层循环还会重新将它重置为0——数学里0乘以任何数结果都是0,不管内层循环怎么乘,最终product都会保持0,自然返回数组全是0。 - 另外你的嵌套循环属于冗余逻辑,时间复杂度是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
相关产品推荐
相关产品推荐

