剑指 Offer 66. 构建乘积数组
知识点:数组
题目链接
题目描述
给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积, 即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。
示例:
输入: [1,2,3,4,5]
输出: [120,60,40,30,24]
提示:
- 所有元素乘积之和不会溢出 32 位整数
- a.length <= 100000
解题思路
- 由于这道题不能用除法,我们只能乘
- 画图可知
1 | A[1] | A[2]
A[0] | 1 | A[2]
A[0] | A[1] | 1
- 先计算左下角 ans[i] = ans[i-1] * a[i-1]
- 再计算右上角 tmp *= ans[i+1]; ans[i] *= tmp
代码
#include "cheader.h"
class Solution {
public:
vector<int> constructArr(vector<int>& a) {
int num = a.size();
if(num == 0)
return {};
vector<int> ans(num);
ans[0] = 1;
for(int i = 1; i < num;i++){
ans[i] = ans[i-1] * a[i-1];
}
int tmp = 1;
for(int i = num-2; i >= 0; i--){
tmp *= a[i+1];
ans[i] *= tmp;
}
return ans;
}
};
今天也是爱zz的一天!