面试经典150——除自身以外数组的乘积

news/2025/1/15 22:02:08/

面试经典150题 day13

      • 题目来源
      • 我的题解
        • 方法一 前后缀乘积
        • 方法二 优化空间版本

题目来源

力扣每日一题;题序:238

我的题解

方法一 前后缀乘积

分别计算前缀乘积L和后缀乘积R,分别表示位置i之前的乘积和位置i之后的乘积。对应位置i上的最终乘积就是L[i]*R[i]。
具体操作:

  • 初始化L[0]=1,R[n-1]=1
  • L[i]=L[i-1]*nums[i-1]
  • R[i]=R[i+1]*nums[i+1]

时间复杂度:O(n)
空间复杂度:O(n)

java">public int[] productExceptSelf(int[] nums) {int n=nums.length;int[] L=new int[n];int[] R=new int[n];L[0]=1;R[n-1]=1;for(int i=1;i<n;i++)L[i]=L[i-1]*nums[i-1];for(int i=n-2;i>=0;i--)R[i]=R[i+1]*nums[i+1];for(int i=0;i<n;i++)L[i]=L[i]*R[i];return L;
}
方法二 优化空间版本

在方法一中如果除了将L作为结果输出数组,还需要一个额外的后缀乘积数组R,因此导致空间为O(n),但是实际上R可以动态构建,不用暂存。

时间复杂度:O(n)
空间复杂度:O(1)

java">public int[] productExceptSelf(int[] nums) {int n=nums.length;int[] L=new int[n];int R=1;L[0]=1;for(int i=1;i<n;i++)L[i]=L[i-1]*nums[i-1];for(int i=n-1;i>=0;i--){L[i]=L[i]*R;R=R*nums[i];}return L;
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~


http://www.ppmy.cn/news/1429827.html

相关文章

【解决去除springboot-内嵌tomcat的异常信息显示】去掉版本号和异常信息

调用这个&#xff0c;能复现tomcat的报错 http://localhost:8182/defaultroot/DownloadServlet?modeType2&pathhtml&FileName…\login.jsp&name123&fiewviewdownload2&cdinline&downloadAll2 springboot项目如何隐藏&#xff1f; springboot内嵌了to…

SpringBoot多数据源(二)

SpringBoot多数据源AbstractRoutingDataSource&#xff08;二&#xff09; 1.多数据源配置2.多数据源调用流程3.实现 1.多数据源配置 spring-jdbc模块提供AbstractRoutingDataSource,其内部可以包含了多个DataSource&#xff0c; 然后在运行时来动态的访问数据库 2.多数据源…

知攻善防应急靶场-Windows(Web1-2-3)

知攻善防应急靶场-Web1 1.要求 2.过程 直接扫网站根目录 发现后门 <?php error_reporting(0); session_start();$key"e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位&#xff0c;默认连接密码rebeyond$_SESSION[k]$key;session_write_close();$postf…

Android集成Sentry实践

需求&#xff1a;之前使用的是tencent的bugly做为崩溃和异常监控&#xff0c;好像是要开始收费了&#xff0c;计划使用开源免费的sentry进行替换。 步骤&#xff1a; 1.修改工程文件 app/build.gradle apply plugin: io.sentry.android.gradle sentry {// 禁用或启用ProGua…

Week7-LeetCode

2923.找到冠军(简单) 法1&#xff1a; class Solution:def findChampion(self, grid: List[List[int]]) -> int:Winner 0n len(grid)loser [0 for _ in range(n)] for i in range(n):for j in range(n):if grid[i][j] 1 and i ! j:loser[j] 1for index in range(n):i…

笔记 | 编译原理L2:词法分析(lexical analysis)

1 概述 词法分析(lexical analysis)&#xff0c;也称scanning, 编译程序的第一阶段,其作用是识别单词(程序意义上)并找出词法错误. 读入源程序的输入字符、将它们拆分成词素&#xff0c;生成并输出一个词法单元序列&#xff0c;每个词法单元对应于一个词素 回顾词法分析在整个…

2024年04月18日优雅草便民tools开源-git以及dcloud同步-长期更新

优雅草小工具-数据来自优雅草api赋能 优雅草小工具-数据来自优雅草api赋能-优雅草便民工具是一款由成都市一颗优雅草科技有限公司打造的便民查询公益工具&#xff0c;2024年1月17日正式发布v1.0.0版本&#xff0c;本工具为了方便大众免费使用&#xff0c;本生活小工具会陆续加入…

状态模式(状态和行为分离)

状态模式 文章目录 状态模式什么是状态模式状态模式好处与用处什么时候考虑使用状态模式通过示例了解状态模式 什么是状态模式 状态模式(State),当一个对象的内在状态改变时允许改变其行为&#xff0c;这个对象看起来像是改变了其类 状态模式主要解决的是当控制一个对象状态转换…