剑指offer(54):构建乘积数组
来源:互联网 发布:西安it 编辑:程序博客网 时间:2024/06/05 17:01
题目描述
给定一个数组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可以得知,B[i]从i处可以分割为左右两个部分,记为B[i] = C[i] * D[i]
。则数组B可以用一个矩形来创建,B[i]为矩阵中第i行所有元素的乘积。则C[i]可以通过自上而下的计算,C[i] = C[i - 1] * A[i - 1]
;D[i]可以通过自下而上的计算,D[i] = D[i + 1] * A[i + 1]
。时间复杂度为
牛客AC:
public class Solution { public int[] multiply(int[] A) { if(A == null || A.length <= 0) return null; int length = A.length; int[] B = new int[length]; // 计算左边数组部分 B[0] = 1; for(int i = 1; i < length; i++) B[i] = B[i - 1] * A[i - 1]; // 计算右边数组部分,合并 int tmp = 1; for(int i = length - 2; i >=0; i--) { tmp *= A[i + 1]; B[i] *= tmp; } return B; }}
0 0
- 剑指offer(54):构建乘积数组
- 剑指offer(48)-构建乘积数组
- 剑指offer--构建乘积数组
- 《剑指offer》构建乘积数组
- 剑指offer-构建乘积数组
- 剑指offer:构建乘积数组
- 剑指offer:构建乘积数组
- 剑指offer:构建乘积数组
- [剑指offer]构建乘积数组
- 剑指offer|构建乘积数组
- 《剑指offer》-构建乘积数组
- 剑指offer 构建乘积数组
- 构建乘积数组--剑指Offer
- 【剑指offer】构建乘积数组
- 《剑指offer》构建乘积数组
- 剑指offer-构建乘积数组
- 剑指offer--构建乘积数组
- 构建乘积数组 剑指offer
- 百度地图开发(1)-----如何从hello baidumap定位所处城市并进行切换
- iOS常见控件的基本使用
- 1006-F专题三
- JavaScript API集合
- oracle_建表并指定字段和描述
- 剑指offer(54):构建乘积数组
- qt creator中出现常量中有换行符或乱码问题
- html5 拖拽
- 多边形构成问题(今日头条笔试题)
- 『Python』序列学习总结之五 ——列表推导式的一些应用
- 【数论】bzoj4174tty的求助
- python 代码缩进
- IDE习惯配置之颜色篇
- Java 8十个lambda表达式案例