js一刷
javascript
var productExceptSelf = function(nums) {
let answer=[];
let prev=[];
let after=[];
prev[0]=1,after[nums.length-1]=1;
for(let i=1;i<nums.length;i++){
prev[i]=prev[i-1]*nums[i-1];
}
for(let i=nums.length-2;i>=0;i--){
after[i]=after[i+1]*nums[i+1];
}
for(let i=0;i<nums.length;i++){
answer[i]=prev[i]*after[i];
}
return answer;
};
js一刷 优化
javascript
var productExceptSelf = function(nums) {
let answer=[];
answer[0]=1;
for(let i=1;i<nums.length;i++){
answer[i]=answer[i-1]*nums[i-1];
}
let after=1;
for(let i=nums.length-1;i>=0;i--){
answer[i]*=after;
after*=nums[i];
}
return answer;
};
算法核心:由于不能用除法,采用前缀积乘以后缀积的方式
一个数的 前缀积=前一个数的前缀积 × 前一个数的值
后缀同理
分别用两个数组存储每一个位置的前缀积和后缀积
空间优化:只用一个数组,先用这个数组记录每个位置的前缀积,然后一边计算后缀积,一边把前缀积与后缀积相乘,乘完后更新后缀积