ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

构建乘积数组

2020-12-09 02:03:22  阅读:165  来源: 互联网

标签:连乘 ... 乘积 temp int 三角 length 构建 数组



给定一个数组 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;
    }
}

标签:连乘,...,乘积,temp,int,三角,length,构建,数组
来源: https://www.cnblogs.com/Yee-Q/p/14106548.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有