51、构建乘积数组

一、题目

给定一个数组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]。不能使用除法。

二、解法

 1 import java.util.ArrayList;
 2 public class Solution {
 3     public int[] multiply(int[] A) {
 4            int len = A.length;
 5             int[] B = new int[len];
 6             if(len != 0){
 7                 B[0] = 1;
 8                 //计算下三角连乘
 9                 for(int i = 1; i < len; i++)
10                     B[i] = B[i-1]*A[i-1];
11                 int temp = 1;
12                 //计算上三角
13                 for(int j = len - 2; j >=0; j--){
14                     temp *= A[j+1];
15                     B[j] *= temp;
16                 }
17             }
18             return B;
19     }
20 }
时间: 2024-10-15 00:51:22

51、构建乘积数组的相关文章

剑指Offer对答如流系列 - 构建乘积数组

面试题66:构建乘积数组 题目描述 给定一个数组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]=A[0]*A[1]*.....*A[n-1]/A[i]表示,使用除法时要特别注意A[i]等于0的情况. 因为每个B[i]都会有重复,其中有着一定的规律性,我们可以尝试找规律,利用规律来解答这道问题. B

剑指offer-66 构建乘积数组

剑指offer-66 构建乘积数组 题目: 给定一个数组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];) 思路: 自己解答: import java.util.ArrayList; public class So

《剑指offer》第六十六题:构建乘积数组

// 面试题66:构建乘积数组 // 题目:给定一个数组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].不能使用除法. #include <cstdio> #include <vector> using namespace std; //把B[i]看成[=A[0],A[1],… ,A[i-1],1,A[i+1],…,A[n-1]] //对于B,就成

剑指offer:构建乘积数组

http://www.cnblogs.com/wxdjss/p/5448990.html 给定一个数组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].不能使用除法. 不乘第i个数 可以把B[i]=A[0]*A[1]*.....*A[i-1]*A[i+1]*.....*A[n-1].看成A[0]*A[1]*.....*A[i-1]和 A[i+1]*.....A[n-2]*

《剑指offer》构建乘积数组

[ 声明:版权所有,转载请标明出处,请勿用于商业用途.  联系信箱:[email protected]] 题目链接:http://www.nowcoder.com/practice/94a4d381a68b47b7a8bed86f2975db46?rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中

(剑指Offer)面试题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].不能使用除法. 思路: 方法1: 直接连乘n-1个数,得到B[i]: 时间复杂度:O(n^2) 方法2: 构建前向乘积数组C[i]=A[0]*A[1]*...*A[i-1],即C[i]=C[i-1]*A[i-1]: 构建后向乘积数组D[i]=A[n-1]*A[n-2]*...A[n-i+1],即D[i]

剑指:构建乘积数组

题目描述 给定一个数组 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]. 不能使用除法. 样例 输入:[1, 2, 3, 4, 5] 输出:[120, 60, 40, 30, 24] 思考题: 能不能只使用常数空间?(除了输出的数组之外) 解法 把 B 的每个元素 B[i] 看成两半的乘积,即 A[0]xA[1]x...xA[i-1] 和 A[i+1]xA[i+2

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[i] = c[i]* d[i] //c[i] = A[0]*A[1]*...*A[i-1] = C[i-1] * A[i-1]; //D[I] = A[i-1]*A[i+1]*...*A[n-1] = a[i+1]*D[I+1]; 注意: 用一个变量B[]表示,C和D im

剑指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].不能使用除法. 思路分析: 用两层FOR循环,当i=j时,不做处理,否则进行累乘.代码简单,一看就懂. 代码: <span style="font-family:SimSun;font-size:18px;">import java.util.ArrayList; public