您的位置:首页 > Web前端

剑指offer——构建乘积数组

2016-07-20 14:56 369 查看

题目描述:

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

思路:

把前半部分与后半部分保存到两个不同的数组中,用front[i]表示从A[0]…到A[i - 1]的值,用 back[i]表示从A[i + 1]…到A[n - 1]的值,循环一次,将结果保存在两个数组中,再遍历一次相乘即可得到最后结果。

算法实现:

import java.util.ArrayList;
public class Solution {
public int[] multiply(int[] A) {
int n = A.length;
//front[i]就是从A[0]...到A[i - 1]的值
int[] front = new int
;
if(n<=1) return front;
/* back[i]就是从A[i + 1]...到A[n - 1]的值
* back数组的第一位从最后一位开始,所以back[n - 1]=1
*/
int[] back = new int
;
front[0] = back[n-1] = 1;
//分别计算前半部分和后半部分的值,并分别将结果保存在front与back数组中
for(int i=1;i<n;i++){
front[i] = front[i-1]*A[i-1];
back[n-i-1] = back[n-i]*A[n-i];
}
//将两个计算结果两次相乘得到最后的结果
for(int i=0;i<n;i++){
front[i] *=back[i];
}
//返回front数组即为所求
return front;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: