zoukankan      html  css  js  c++  java
  • 构建乘积数组


    给定一个数组 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[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2]。对于 A 长度为 1 的情况,B 无意义,故而无法构建,因此该情况不会存在


    解题思路

    B[i] 的值可以看作下图的矩阵中每行的乘积


    我们可以先从下三角开始,用连乘求得下三角的部分值,即先算出 B[i] 中的一部分,然后上三角同样如此,最后一次乘进去,就是最终的 B[i] 值

    public class Solution {
        public int[] multiply(int[] A) {
            int length = A.length;
            int[] B = new int[length];
            if(length != 0) {
            	// 先计算下三角连乘
            	// 只看下三角,此时B[0]的值只是1
                B[0] = 1;
                // 从B1开始,观察图形规律可知:
                // 下三角B[i]值 = B[i - 1] * A[i - 1]
                for(int i = 1; i < length; i ++) {
                    B[i] = B[i - 1] * A[i - 1];
                }
                // 计算上三角连乘
                int temp = 1;
                // 同样的规律,只是反过来而已
                for(int i = length - 2; i >= 0; i--) {
                    temp *= A[i + 1];
                    B[i] *= temp;
                }
            }
            return B;
        }
    }
    

  • 相关阅读:
    ehcache 使用
    android 换肤 apk
    ant 打不同渠道包
    strawberry perl
    rest 网络设计开发,降低复杂性设计方案
    android 进度条
    android 算定义布局xml
    ant 自动打包
    c# 调用cmd 输出 阻塞 解决
    web service2
  • 原文地址:https://www.cnblogs.com/Yee-Q/p/14106548.html
Copyright © 2011-2022 走看看