剑指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
    }
}


相关文章
|
5月前
|
算法
LeetCode 1480. 一维数组的动态和
LeetCode 1480. 一维数组的动态和
59 0
LeetCode 1480. 一维数组的动态和
|
机器学习/深度学习 算法
代码随想录Day02 数组基础2 leetcode T977有序数组的平方, T209 长度最小的子数组,T59 螺旋矩阵II
代码随想录Day02 数组基础2 leetcode T977有序数组的平方, T209 长度最小的子数组,T59 螺旋矩阵II
64 0
|
8月前
|
Python Java Go
Python每日一练(20230421) 组合总和II、加一、中后序遍历构造二叉树
Python每日一练(20230421) 组合总和II、加一、中后序遍历构造二叉树
53 0
Python每日一练(20230421) 组合总和II、加一、中后序遍历构造二叉树
|
C语言
LeetCode二维数组例题(原地旋转和对角线遍历)-c语言
LeetCode二维数组例题(原地旋转和对角线遍历)-c语言
153 0
|
8月前
|
存储 人工智能 Java
每日一题《剑指offer》数组篇之构建乘积数组
每日一题《剑指offer》数组篇之构建乘积数组
50 0
每日一题《剑指offer》数组篇之构建乘积数组
|
8月前
|
存储 BI
【剑指offer】-构建乘积数组-42/67
【剑指offer】-构建乘积数组-42/67
|
人工智能 算法 BI
剑指offer(C++)-JZ66:构建乘积数组(算法-其他)
剑指offer(C++)-JZ66:构建乘积数组(算法-其他)
|
存储 C语言 C++
【前缀和】238. 除自身以外数组的乘积/剑指 Offer 66. 构建乘积数组
【前缀和】238. 除自身以外数组的乘积/剑指 Offer 66. 构建乘积数组
78 0
|
存储 人工智能 算法
剑指offer 74. 构建乘积数组
剑指offer 74. 构建乘积数组
65 0
剑指offer_数组---数组中的逆序对
剑指offer_数组---数组中的逆序对
57 0