从零学算法238

238.给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。
题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。
请 不要使用除法,且在 O(n) 时间复杂度内完成此题。
示例 1:
输入: nums = [1,2,3,4]
输出: [24,12,8,6]
示例 2:
输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]
提示:
2 <= nums.length <= 10^5
-30 <= nums[i] <= 30
保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内
进阶:你可以在 O(1) 的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组 不被视为 额外空间。)

  • 我们最容易想到的就是先求出所有数的乘积,然后用乘积除以每个数即可,但是题目要求不用除法。那我们肯定是用乘法,我们在求某个元素对应的结果时,只要有左边数组的乘积和右边数组的乘积,两数相乘就是答案,所以我们用两个数组记录,left[i] 表示下标为 i 元素左边数组的乘积,right[i] 表示下标为 i 元素右边数组的乘积。
  •   public int[] productExceptSelf(int[] nums) {int n = nums.length;int[] left = new int[n];// 首位元素左边没数字,所以乘积默认为 1left[0] = 1;int[] right = new int[n];// 同理末尾元素右边没数字,所以乘积默认为 1right[n-1] = 1;// 获取每个元素左边所有元素的乘积for(int i=1;i<n;i++){left[i]=left[i-1]*nums[i-1];}// 获取每个元素右边所有元素的乘积for(int i=n-2;i>=0;i--){right[i] = right[i+1]*nums[i+1];}int[] res = new int[n];// 每个元素对应结果等于左右乘积相乘for(int i=0;i<n;i++){res[i]=left[i]*right[i];}return res;}
    
  • 那其实我们在获取每个元素右边的乘积的时候,每获得一个其实就能得到一个元素对应的结果了,所以可以合并第 2,3 个 for 循环
  •   public int[] productExceptSelf(int[] nums) {int n = nums.length;int[] left = new int[n];// 首位元素左边没数字,所以乘积默认为 1left[0] = 1;int[] right = new int[n];// 同理末尾元素右边没数字,所以乘积默认为 1right[n-1] = 1;// 获取每个元素左边所有元素的乘积for(int i=1;i<n;i++){left[i]=left[i-1]*nums[i-1];}// 获取每个元素右边所有元素的乘积// 同时获得该元素对应的结果int[] res = new int[n];// 该元素最右边的结果其实就是左边所有数的乘积res[n-1] = left[n-1];for(int i=n-2;i>=0;i--){right[i] = right[i+1]*nums[i+1];res[i]=left[i]*right[i];}return res;}
    
  • 上面在获取右乘积时我们会发现,其实我们的每个 right[i] 只和他的前一个乘积有关,那我们都不需要数组,用一个变量不断更新即可
  •   public int[] productExceptSelf(int[] nums) {int n = nums.length;int[] left = new int[n];left[0] = 1;for(int i=1;i<n;i++){left[i]=left[i-1]*nums[i-1];}int[] res = new int[n];int right = 1;for(int i=n-1;i>=0;i--){res[i] = left[i]*right;right*=nums[i];}return res;}
    
  • 题目最后说能否用 O(1) 的额外空间,结果数组 res 不算,那你直接把 res 当做 left 用即可
  •   public int[] productExceptSelf(int[] nums) {int n = nums.length;int[] res = new int[n];res[0] = 1;for(int i=1;i<n;i++){re[i]=res[i-1]*nums[i-1];}int right = 1;for(int i=n-1;i>=0;i--){res[i] *= right;right*=nums[i];}return res;}
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/696917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python自动化UI测试之Selenium基础实操

1. Selenium简介 Selenium 是一个用于 Web 应用程序测试的工具。最初是为网站自动化测试而开发的&#xff0c;可以直接运行在浏览器上&#xff0c;支持的浏览器包括 IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Googl…

SVN忽略已提交的文件(ignore,移出版本控制)

本文适用于已安装TortoiseSVN客户端的同学。 1、右键点击要忽略的文件夹或文件&#xff0c;鼠标移到“TortoiseSVN”&#xff0c;找到“Unversion and add to ignore list”&#xff0c;选择文件夹&#xff0c;弹出提示框确认忽略。 2、设置完忽略文件后&#xff0c;还需要做…

多维时序 | Matlab实现GRU-MATT门控循环单元融合多头注意力多变量时间序列预测模型

多维时序 | Matlab实现GRU-MATT门控循环单元融合多头注意力多变量时间序列预测模型 目录 多维时序 | Matlab实现GRU-MATT门控循环单元融合多头注意力多变量时间序列预测模型预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.多维时序 | Matlab实现GRU-MATT门控循环单元融…

【Maven】介绍、下载及安装、集成IDEA

目录 一、什么是Maven Maven的作用 Maven模型 Maven仓库 二、下载及安装 三、IDEA集成Maven 1、POM配置详解 2、配置Maven环境 局部配置 全局设置 四、创建Maven项目 五、Maven坐标详解 六、导入Maven项目 方式1&#xff1a;使用Maven面板&#xff0c;快速导入项目 …

React Native框架开发介绍,以及其优点

大家好&#xff0c;我是咕噜铁蛋&#xff0c;在今天的文章中&#xff0c;我通过科技手段和大家一起探讨一下React Native框架的开发介绍以及其优点。我深知选择合适的开发工具对于项目的成功至关重要。而React Native作为一款流行的跨平台移动应用开发框架&#xff0c;其独特之…

Linux并发与竞争的基本概念

一. 简介 Linux是一个多任务操作系统&#xff0c;肯定会存在多个任务共同操作同一段内存或者设备的情况&#xff0c; 多个任务甚至中断都能访问的资源叫做共享资源&#xff0c;在驱动开发中要注意对共享资源的保护&#xff0c;也就是要处理对共享资源的并发访问。比如&#xf…

【服务器数据恢复】FreeNAS+ESXi虚拟机数据恢复案例

服务器数据恢复环境&#xff1a; 一台服务器通过FreeNAS&#xff08;本案例使用的是UFS2文件系统&#xff09;实现iSCSI存储&#xff0c;整个UFS2文件系统作为一个文件挂载到ESXi虚拟化系统&#xff08;安装在另外2台服务器上&#xff09;上。该虚拟化系统一共有5台虚拟机&…

2024水科技大会暨技术装备成果展览会——高品质供水和饮用水水源安全保障论坛

供水与饮水安全直接关系到人民群众的生活与健康&#xff0c;切实做好城市供水与饮水安全保障工作&#xff0c;是把以人为本真正落到实处的一项紧迫任务。近年来&#xff0c;中央和地方加大了城乡供水与饮水安全保障工作的力度&#xff0c;对标最优质供水城市建设要求&#xff0…

[Angular 基础] - service 服务

[Angular 基础] - service 服务 之前的笔记就列举三个好了……没想到 Angular 东西这么多(&#xff70; &#xff70;;)……全加感觉越来越凑字数了 [Angular 基础] - 视图封装 & 局部引用 & 父子组件中内容传递 [Angular 基础] - 生命周期函数 [Angular 基础] - 自…

请简述你对SpringMVC的理解

SpringMVC是一种基于Java语言开发&#xff0c;实现了WebMVC设计模式&#xff0c;请求驱动类型 的轻量级Web框架。 采用了MVC架构模式的思想&#xff0c;通过把Model&#xff0c;View&#xff0c;Controller分离&#xff0c;将Web层进 行职责解耦&#xff0c;从而把复杂的Web应…

idea打开项目白屏

解决方法&#xff1a; 右键“最大化” idea打开项目白板解决方案_idea打开白屏-CSDN博客 IDEA 2022 CPU占用100%的问题及解决方法_java_脚本之家

STM32控制数码管从0显示到99

首先 先画电路图吧&#xff01;打开proteus&#xff0c;导入相关器件&#xff0c;绘制电路图。如下&#xff1a;&#xff08;记得要保存啊&#xff01;发现模拟一遍程序就自动退出了&#xff0c;有bug&#xff0c;我是解决不了&#xff0c;所以就是要及时保存&#xff0c;自己重…

计算机组成原理(10)----微程序控制器

目录 1.微程序控制器的设计思想 2.微指令的基本格式 3.微程序控制器的基本结构 &#xff08;1&#xff09;控制存储器CM &#xff08;2&#xff09;CMAR &#xff08;3&#xff09;地址译码 &#xff08;4&#xff09;CMDR &#xff08;5&#xff09;微地址形成部件 &…

31.云原生Istio可观测性之官网Bookinfo应用实战演示

云原生专栏大纲 文章目录 可观测性kiali介绍Overview&#xff08;概观&#xff09;Application&#xff08;应用维度&#xff09;workloads&#xff08;负载维度&#xff09;Services&#xff08;服务维度&#xff09;Istio Config&#xff08;配置维度&#xff09; Kiali部署…

音频声波的主观感受

一、响度 声压是“客观”的&#xff0c;响度是“主观”的。 响度又称音量。人耳感受到的声音强弱&#xff0c;它是人对声音大小的一个主观感觉量。响度的大小决定于声音接收处的波幅&#xff0c;就同一声源来说&#xff0c;波幅传播的愈远&#xff0c;响度愈小…

React18原理: React核心对象之Update、UpdateQueue、Hook、Task对象

Update 与 UpdateQueue 对象 1 ) 概述 在fiber对象中有一个属性 fiber.updateQueue是一个链式队列&#xff08;即使用链表实现的队列存储结构&#xff09;是和页面更新有关的 2 &#xff09;Update对象相关的数据结构 // https://github.com/facebook/react/blob/v18.2.0/pa…

【Nginx】Nginx配置反向代理 和 https

nginx.conf配置 进入linux /etc/nginx/ 打开nginx.conf 进行以下配置 http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {#监听443端口listen 443 ssl;#你的域名server_name huiblog.top;#ssl证书的pe…

VSCode The preLaunchTask ‘C/C++: clang++ 生成活动文件‘ terminated with exit code -1

更改tasks.json文件里面的type为shell 选择g 选择g&#xff0c;然后点回到text.c&#xff0c;按下F5. 得到结果。 文中内容参考: 从零开始手把手教你配置属于你的VS Code_哔哩哔哩_bilibili https://blog.csdn.net/qq_63872647/article/details/128006861

【EasyV】QGIS转换至EasyV

QGIS转换至EasyV 第一步&#xff1a;导入QGIS第二步 坐标系转换第三步 集合修正第四步 重命名字段第五步 导出WGS geojson坐标第六步 导入EasyV 第一步&#xff1a;导入QGIS 第二步 坐标系转换 第三步 集合修正 第四步 重命名字段 第五步 导出WGS geojson坐标 第六步 导入EasyV…

【es6】模版字面量/模版字符串,标签函数/String.raw()静态方法

模版字符串经常用&#xff0c;但是这个标签函数的功能你肯定不知道&#xff0c;请看官网文档 看完你需要知道 可以自定义标签函数String.raw 的用法 唯一一个内置的模版字符串标签函数第一个参数具有 raw 属性的对象&#xff0c;值时一个类数组字符串对象模版字面量的缓存机制…