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

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

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

相关推荐
JavaGuide9 小时前
NVIDIA 又开源了!这次给 AI Agent 加上权限管控
前端·后端
excel9 小时前
prisma 如何处理数据库竞态
前端·数据库·后端
Cccp.1239 小时前
【leetcode】(七)前缀树和贪心算法
数据结构·leetcode·贪心算法
莪_幻尘10 小时前
Skill 体检:30 个 Skill 全凭感觉?体检器先自曝了 8 个“假 0 分
前端·人工智能·llm
风骏时光牛马10 小时前
AI模型综合能力评测:性能、指令遵循与多场景实测对比
前端
Frag0ut10 小时前
Chrome与Chromium内核浏览器在Windows 11上的新特性全景解析
前端·chrome·windows·web安全·chromium·gemini ai·playready drm
hiahiahia12311 小时前
实现完整 Tool Dispatcher
开发语言·前端
IT_陈寒11 小时前
Java线程池这破玩意,差点让我周末加班排查到凌晨
前端·人工智能·后端
Mr_Mao12 小时前
告别选型困难!集 VueUse、ahooks、Mantine 于一身:286 个 Hook 的 ReaUse 来了
前端·javascript·react.js
泡海椒12 小时前
趋势分析报表:jquick-pdf折线图PDF生成实战
java·大数据·运维·服务器·前端·pdf