/**
* @since 2020/7/18
* 构建乘积数组:排除第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]。
* 不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)
*/
public class Demo51 {
// 方法一: 暴力双重循环---O(N^2)
// public int[] multiply(int[] A) {
// int[] B = new int[A.length];
// for (int i = 0; i < A.length; i++) {
// int temp = 1;
// for (int j = 0; j < A.length; j++) {
// if (j != i)
// temp *= A[j];
// }
// B[i] = temp;
// }
// return B;
// }
// 方法二: 分别计算B的以i为界限左右两侧,这样可以保存上一次计算的B[i-1]的值,以此来降低时间复杂度
public int[] multiply(int[] A) {
int[] B = new int[A.length];
B[0] = 1;
for (int i = 1; i < A.length; i++) {
B[i] = B[i - 1] * A[i - 1];
}
int right = 1;
for (int i = A.length - 1; i >= 0; i--) {
B[i] *= right;
right *= A[i];
}
return B;
}
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交