劍指 offer之構建乘積數組_Java

題目:構建乘積數組
題目描述
給定一個數組A[0,1,…,n-1],請構建一個數組B[0,1,…,n-1],其中B中的元素B[i]=A[0]XA[1]X…*A[i-1]XA[i+1]X…XA[n-1]。不能使用除法。

解題思路:

B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1] 將B[I] 拆分爲兩部分:
(1) down[I]=A[0]XA[1]X…*A[i-1]=down[I-1]*A[I-1]; 從上往下遍歷
(2) up[I]=A[i+1]X…XA[n-1] =up[I+1]A[I+1] 從下向上遍歷
在這裏插入圖片描述
ps:圖片來源於劍指 offer評論區
代碼實現:
import java.util.ArrayList;
import java.util.
;
public class Solution {
public int[] multiply(int[] A) {
int len = A.length;
// 定義下三角:down[i]=down[i+1]*A[i+1]
int[] up = new int[len];
up[len - 1] = 1;
for (int i = len - 2; i >= 0; i–) {
up[i] = up[i + 1] * A[i + 1];
}
//System.out.println(Arrays.toString(up));
// 定義下三角:down[i]=down[i-1]*A[i-1]
int[] down = new int[len];
down[0] = 1;
for (int i = 1; i < len; i++) {
down[i] = down[i - 1] * A[i - 1];
}
//System.out.println(Arrays.toString(down));
int[] res = new int[len];
for (int i = 0; i < len; i++) {
res[i] = up[i] * down[i];
}
return res;
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章