构建乘积数组
构建乘积数组
https://www.nowcoder.com/practice/94a4d381a68b47b7a8bed86f2975db46?tpId=13&&tqId=11204&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
假设:
left[i] = A[0]...*A[i-1]
right[i] = A[i+1]...*A[n-1]
所以:
B[i] = left[i] * right[i]
所以我们可以先算出left[i],然后再算出right[i]
left[i] = left[i-1] X A[i-1]
right[i] = A[i+1] X right[i-1]![]()
public int[] multiply(int[] A) {
int n = A.length;
int[] B = new int[n];
B[0] = 1;
// 现在B[i] 相当于left[i]
for(int i = 1; i < n; i++){
B[i] = B[i-1]*A[i-1];
}
int tmp = 1; // 最后一个刚开始是1
//从倒数第二个算起
for(int i = n-2; i >= 0; --i){
// tmp相当于right[i]
tmp *= A[i+1];
//相当于 B[i] = left[i] * right[i]
B[i] *= tmp;
}
return B;
}
剑指offer 文章被收录于专栏
为刷过的每一道题都书写一篇题解,便于重复练习~
查看18道真题和解析