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

    }

}
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 点我我会动 设计师: 上身试试
应支付0元
点击重新获取
扫码支付

支付成功即可阅读