题解 | #构建乘积数组#

构建乘积数组

https://www.nowcoder.com/practice/94a4d381a68b47b7a8bed86f2975db46

import java.util.ArrayList;
public class Solution {
    public int[] multiply(int[] A) {
        if (A == null || A.length < 2)
            return null;
        int[] B = new int[A.length];
        // 初始化第⼀个值
        B[0] = 1;
        // 计算左边的乘积
        for (int i = 1; i < A.length; i++)
            B[i] = B[i - 1] * A[i - 1];
        // 初始化临时变量
        int temp = 1;
        // 从右边往左边计算
        for (int i = A.length - 2; i >= 0; i--) {
            // 计算右边的乘积
            temp *= A[i + 1];
            // 右边乘以左边
            B[i] *= temp;
        }
        return B;
    }
}

解题思想:除了穷举之外

* 可以分解开看。最后的结果中,每⼀个数,都是等于它左边的所有数,乘以它右边的所有数。

* 那么我们可以申请⼀个数组,假设为 B[] ,第⼀次遍历的数组 A[] 的时候,把每⼀个数 A[i] 左边的所有数的乘积,乘起来,放在 B[i] 的位置。此时,每⼀个数左边的乘积已经有了,如何计算右边的乘积呢?

* 可以同样申请⼀个数组 C[] 存起来,但是没有必要,因为我们从右边往左边遍历的时候,只需要⽤⼀个临时变量,把右边的乘积存着,和左边的乘积相乘,赋值到原来的数组 A[] ,就可以了。

#算法##算法笔记#
全部评论

相关推荐

AI牛可乐:哇,听起来你遇到了什么挑战呢!🐮牛可乐在这里,虽然小,但是勇敢又聪明,想听听你的具体情况哦!如果你愿意的话,可以点击我的头像给我私信,我们可以一起想办法应对挑战,好不好呀?🌟🎉
点赞 评论 收藏
分享
jack_miller:杜:你不用我那你就用我的美赞臣
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务