52:构建乘积数组
来源:互联网 发布:山东竞彩网络实体店 编辑:程序博客网 时间:2024/04/30 10:52
题目描述:
给定一个数组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] = C[i] * D[i],其中C[i] = A[0]*A[1]*...*A[i-1],D[i] = A[i+1]*...*A[n-1]。而 C[i] = C[i-1] * A[i-1],D[i] = D[i+1] * A[i+1],由此我们可以利用递归公式求出每个B[i];显然这个方法的时间复杂度为O(n),空间复杂度为O(1)。
代码如下:
import java.util.ArrayList;public class Solution { public int[] multiply(int[] A) { int length = A.length; if(A == null || A.length < 1) return null; int[] B = new int[A.length]; int[] C = new int[A.length]; int[] D = new int[A.length]; //用来存放最终结果 B[0] = 1; C[length-1] = 1; for(int i = 1;i<length;i++){ B[i] = B[i-1] * A[i-1]; //前半部分 C[length-1-i] = C[length-i] *A[length-i]; //后半部分 } for(int i=0;i<length;i++){ D[i]=B[i] * C[i]; } return D; }}
0 0
- 52 - 构建乘积数组
- 52:构建乘积数组
- 数组------构建乘积数组
- 数组:构建乘积数组
- 面试题52:构建乘积数组
- 《剑指offer》:[52]构建乘积数组
- 面试题52: 构建乘积数组
- 剑指Offer 52 构建乘积数组
- 【剑指offer】题52:构建乘积数组
- 面试题52:构建乘积数组
- 剑指offer 52 构建乘积数组
- 构建乘积数组
- 构建乘积数组
- 构建乘积数组
- 构建乘积数组
- 构建乘积数组
- 牛客网 | 构建乘积数组
- 构建乘积数组
- SAP HANA CREATE VIEW
- android系统状态栏与虚拟键导航栏与标题栏控制
- LeetCode 4. Median of Two Sorted Arrays
- JavaScript闭包
- nitC语言大作业 停车信息管理系统
- 52:构建乘积数组
- HDOJ 2585 maximum shortest distance(求最大团+二分)
- <2-2>进程管理(2)
- 二叉树的实现及相关函数的实现
- SAP HANA CREATE PROCEDURE
- opencv笔记(8):Haar特征
- 3Sum Closest
- 全兼容系列(3)-------------------鼠标滑过
- Java多线程/并发21、利用Condition来实现阻塞队列