剑指offer_数组---构建乘积数组

简介: 剑指offer_数组---构建乘积数组

题目描述

给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]A[i-1]*A[i+1]…*A[n-1]。不能使用除法。

解题思路

B[i]的值可以看作下图的矩阵中每行的乘积。下三角用连乘可以很容求得,上三角,从下向上也是连乘。因此我们的思路就很清晰了,先算下三角中的连乘,即我们先算出B[i]中的一部分,然后倒过来按上三角中的分布规律,把另一部分也乘进去。

代码实现

/**
 * 
 */
package 数组;
/**
 * <p>
 * Title:乘积数组
 * </p>
 * <p>
 * Description:
 * </p>
 * 
 * @author 田茂林
 * @data 2017年8月15日 下午3:58:31
 */
public class Multiply {
    /**
     * void
     * 
     * @param args
     */
    public int[] multiply(int[] A) {
        int len = A.length;
        int[] B = new int[len];
        if (len != 0) {
            B[0] = 1;
            // 计算下三角连乘
            for (int i = 1; i < B.length; i++) {
                B[i] = B[i - 1] * A[i - 1];
            }
            // 计算下三角连乘
            int temp=1;
            for (int i = len-2; i >=0; i--) {
                temp*=A[i+1];
                B[i]*=temp;
            }
        }
        return B;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
    }
}


相关文章
|
机器学习/深度学习 算法
代码随想录Day02 数组基础2 leetcode T977有序数组的平方, T209 长度最小的子数组,T59 螺旋矩阵II
代码随想录Day02 数组基础2 leetcode T977有序数组的平方, T209 长度最小的子数组,T59 螺旋矩阵II
59 0
|
7月前
|
Python Java Go
Python每日一练(20230421) 组合总和II、加一、中后序遍历构造二叉树
Python每日一练(20230421) 组合总和II、加一、中后序遍历构造二叉树
49 0
Python每日一练(20230421) 组合总和II、加一、中后序遍历构造二叉树
|
7月前
|
存储 人工智能 Java
每日一题《剑指offer》数组篇之构建乘积数组
每日一题《剑指offer》数组篇之构建乘积数组
48 0
每日一题《剑指offer》数组篇之构建乘积数组
|
7月前
|
存储 算法 Java
数据结构和算法面试题:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
数据结构和算法面试题:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
94 0
|
7月前
|
存储 BI
【剑指offer】-构建乘积数组-42/67
【剑指offer】-构建乘积数组-42/67
|
存储 C语言 C++
【前缀和】238. 除自身以外数组的乘积/剑指 Offer 66. 构建乘积数组
【前缀和】238. 除自身以外数组的乘积/剑指 Offer 66. 构建乘积数组
76 0
|
存储 人工智能 算法
剑指offer 74. 构建乘积数组
剑指offer 74. 构建乘积数组
60 0
剑指offer_数组---数组中的逆序对
剑指offer_数组---数组中的逆序对
51 0
剑指offer_数组---连续子数组的最大和
剑指offer_数组---连续子数组的最大和
50 0
剑指offer_数组---数组中只出现一次的数字
剑指offer_数组---数组中只出现一次的数字
73 0