题目描述
给定一个数组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];)
首先不能使用除法,我们想到的可能是连乘,但这样的时间复杂度是O(n^2),接下来我们考虑时间复杂度比较低的算法
以下内容截取自《剑指offer》

剑指offer上思路已经讲的很清楚了,接下来上java代码:
import java.util.ArrayList;
public class Solution {
public int[] multiply(int[] A) {
int length = A.length;
int[] B = new int[length];
if(length != 0 ){
B[0] = 1;
//计算下三角连乘
for(int i = 1; i < length; i++){
B[i] = B[i-1] * A[i-1];
}
int temp = 1;
//计算上三角
for(int j = length-2; j >= 0; j--){
temp *= A[j+1];
B[j] *= temp;
}
}
return B;
}
}

解决一个特殊的数组连乘问题,不使用除法构建新数组B,其中B[i]等于A数组中除A[i]外所有元素的乘积。采用两次遍历策略,先计算下三角连乘,再计算上三角连乘,实现高效算法。
796

被折叠的 条评论
为什么被折叠?



