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

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

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

相关推荐
东方小月18 分钟前
从零开发一个 Coding Agent(十二):实现版本化 JSONL 与真实 CLI 入口
前端·设计模式·前端框架
FL16238631291 小时前
室内易燃物识别易燃评估室内易燃程度识别分割数据集labelme格式1015张85类别
java·服务器·前端
用户059540174461 小时前
把 AI 长期记忆去重测试从 20 分钟压到 40 秒,重复率从 18% 干到 1.5%
前端·css
kyriewen2 小时前
我把 AI 写的并发请求控制器手写了一遍——3 个语义我当时根本讲不清
前端·javascript·面试
_codemonster2 小时前
Vue中的ref和reactive到底在干嘛
前端·javascript·vue.js
Nil2082 小时前
leetcode 138随机链表的复制
算法·leetcode·链表
IT_陈寒3 小时前
为什么我的JavaScript闭包总是漏掉那个变量?
前端·人工智能·后端
两只羊ovo3 小时前
前端八股之 storage & this:两个最容易卡住的点,一次讲透
前端
用户921080262863 小时前
Bubble 打字机效果实践:从项目配置到源码实现
前端