Leetcode 238.除了自身以外数组的乘积 JavaScript (Day 7)

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;    
};

算法核心:由于不能用除法,采用前缀积乘以后缀积的方式
一个数的 前缀积=前一个数的前缀积 × 前一个数的值
后缀同理
分别用两个数组存储每一个位置的前缀积和后缀积

空间优化:只用一个数组,先用这个数组记录每个位置的前缀积,然后一边计算后缀积,一边把前缀积与后缀积相乘,乘完后更新后缀积

相关推荐
GreenTea1 小时前
一文搞懂Harness Engineering与Meta-Harness
前端·人工智能·后端
6Hzlia2 小时前
【Hot 100 刷题计划】 LeetCode 48. 旋转图像 | C++ 矩阵变换题解
c++·leetcode·矩阵
killerbasd3 小时前
牧苏苏传 我不装了 4/7
前端·javascript·vue.js
吴声子夜歌3 小时前
ES6——二进制数组详解
前端·ecmascript·es6
码事漫谈3 小时前
手把手带你部署本地模型,让你Token自由(小白专属)
前端·后端
ZC跨境爬虫3 小时前
【爬虫实战对比】Requests vs Scrapy 笔趣阁小说爬虫,从单线程到高效并发的全方位升级
前端·爬虫·scrapy·html
爱上好庆祝3 小时前
svg图片
前端·css·学习·html·css3
Morwit4 小时前
【力扣hot100】 1. 两数之和
数据结构·c++·算法·leetcode·职场和发展
橘子编程4 小时前
JavaScript与TypeScript终极指南
javascript·ubuntu·typescript
py有趣4 小时前
力扣热门100题之岛屿的数量(DFS/BFS经典题)
leetcode·深度优先·宽度优先