图解LeetCode——238. 除自身以外数组的乘积

news2024/11/27 1:29:01

一、题目

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内。

不要使用除法,且在 O(n) 时间复杂度内完成此题。

二、示例

2.1> 示例 1:

输入】 nums = [1,2,3,4]
输出】 [24,12,8,6]

2.2> 示例 2:

输入】 nums = [-1,1,0,-3,3]
输出】 [0,0,9,0,0]

提示:

  • 2 <= nums.length <= 10^5
  • -30 <= nums[i] <= 30
  • 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内

三、解题思路

根据题目要求,我们需要计算出数组nums中,每个元素除自己之外的乘积值,即假设nums包含4个元素,分别为nums[0]~`nums[3]`,那么最终结果如下所示:

nums[0] = nums[1] * nums[2] * nums[3]
nums[1] = nums[0] * nums[2] * nums[3]
nums[2] = nums[0] * nums[1] * nums[3]
nums[3] = nums[0] * nums[1] * nums[2]

但是如果按照上面计算我们会发现一个问题,就是会出现很多重复计算,比如我们计算nums[0]nums[1]的时候,针对nums[2] * nums[3]这部分就是重复计算的。所以,为了解决这个问题,我们可以看下面这个图,在这个图中白色的格子表示不参与计算,那么正好可以分割为左下角右上角两部分数字集合,具体情况请见下图所述:

针对上面的分析,我们可以分为两部分对数组nums进行计算操作:

【正向遍历数组】 这种遍历方式,我们可以来计算左下角的数字乘积;
【逆向遍历数组】 这种遍历方式,我们可以来计算右上角的数字乘积(用temp保存),然后与左下角再执行相乘操作;

好了,如上就是本题的解题思路了,为了便于大家理解,我们以nums = [1,2,3,4]为例,看一下具体的操作过程。请见下图所示:

四、代码实现

class Solution {
    public int[] productExceptSelf(int[] nums) {
        int n = nums.length, temp = 1;
        int[] result = new int[n];
        result[0] = 1;
        for (int i = 1; i < n; i++) 
            result[i] = result[i-1] * nums[i-1]; 
        for (int i = n - 2; i >= 0; i--) {
            result[i] *= temp * nums[i+1];
            temp *= nums[i+1];
        }
        return result;
    }
}

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

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

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

相关文章

SoringBoot——pom文件:starter

先来看一看&#xff1a; 这次我们来介绍SpringBoot的pom文件的另一个好玩的地方&#xff1a;starter。 starter的中文含义是启动器&#xff0c;所以有时候我们在Maven仓库找依赖的时候&#xff0c;如果开启了自动翻译就会经常会看见一个奇怪的词叫做某某弹簧启动器&#xff0…

2023年河北沃克高位承重货架最新中标项目|中国沈阳某大型集团高位重型横梁式货架项目建设初期

【项目名称】高位重型横梁式货架项目 【承建单位】河北沃克金属制品有限公司 【合作客户】中国沈阳某大型集团 【建设时间】2023年5月上旬 【建设地域】中国沈阳地区 【项目客户需求】 本次沈阳高位重型横梁式货架项目合作的沈阳某大型集团中国变压器行业规模最大的制造企…

AIGC的发展与机遇

陈老老老板&#x1f9b8; &#x1f468;‍&#x1f4bb;本文专栏&#xff1a;赠书活动专栏&#xff08;为大家争取的福利&#xff0c;免费送书&#xff09;试一下文末赠书&#xff0c;讲一些科普类的知识 &#x1f468;‍&#x1f4bb;本文简述&#xff1a;本篇内容的引用都已征…

Protobuf: 高效数据传输的秘密武器

当涉及到网络通信和数据存储时&#xff0c;数据序列化一直都是一个重要的话题&#xff1b;特别是现在很多公司都在推行微服务&#xff0c;数据序列化更是重中之重&#xff0c;通常会选择使用 JSON 作为数据交换格式&#xff0c;且 JSON 已经成为业界的主流。但是 Google 这么大…

《理解了实现再谈网络性能》读书笔记

文章目录 内核是如何接收网络包的1.1 Linux⽹络收包总览1.2 linux 启动创建ksoftirqd进程网络子系统初始化协议栈注册网卡驱动初始化启动网卡 1.3 迎接数据的到来硬中断处理ksoftirqd 内核线程处理软中断网络协议栈处理IP协议层处理 完整流程 内核是如何接收网络包的 1.1 Linu…

使用阿里云服务器建站WordPress博客网站上线全流程

使用阿里云服务器快速搭建网站教程&#xff0c;先为云服务器安装宝塔面板&#xff0c;然后在宝塔面板上新建站点&#xff0c;阿里云服务器网以搭建WordPress网站博客为例&#xff0c;来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流程&#xff1a; …

常见概率分布及图像

概率分布 文章目录 概率分布[toc]1 离散概率分布1.1 伯努利分布1.2 二项分布1.3 泊松分布 2 连续概率分布2.1 均匀分布2.2 指数分布2.3 正态分布2.4 卡方分布2.5 Student分布3.5 F分布 1 离散概率分布 1.1 伯努利分布 随机变量 X X X仅取两个值&#xff0c; X 0 , 1 X0,1 X0…

【2023 年第三届长三角高校数学建模竞赛】C 题 考研难度知多少 考研情况相关数据下载

【2023 年第三届长三角高校数学建模竞赛】C 题 考研难度知多少 1 题目 C 题 考研难度知多少 据相关媒体报道&#xff0c;2023 年考研可以称得上是“最难”的一年&#xff0c;全国研究生报考人数突破新高达到 474 万人、部分考研学生感染新冠带病赴考、保研名额增多 挤压考研…

依次判断数组a1中的每个元素是否小于数组a2中对应位置的每个元素numpy.less()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 依次判断数组a1中的每个元素 是否小于数组a2中对应位置的每个元素 numpy.less() 选择题 以下程序的运行结果是? import numpy as np a1np.array([1,2,3]) a2np.array([3,2,1]) print("【…

消息推送平台的实时数仓?flink消费kafka消息入到hive

上一次比较大的更新是做了austin的预览地址&#xff0c;把企业微信的应用和机器人消息各种的消息类型和功能给完善了。上一篇文章也提到了&#xff0c;austin常规的功能已经更新得差不多了&#xff0c;剩下的就是各种细节的完善。 不知道大家还记不记得我当时规划austin时&…

免费使用的在线Axure原型工具找到了!

在线 Axure 工具替代即时设计&#xff0c;不需要安装插件&#xff0c;直接在浏览器中打开 Axure 原型文件&#xff0c;操作更加便捷。除了支持 Axure&#xff0c;即时设计还兼容 Figma、Sketch、AdobeXD 等更多文件类型&#xff0c;可用于线框设计、UI/UX 设计、原型交互、免切…

linux内核:笔记3-网络数据包收发流程

1.网络分层中&#xff0c;内核协议栈负责实现网络层和传输层 2.内核对用户进程提供socket接口用以调用 3.Linux内核包含链路层驱动用来驱动网络设备 4.内核网络层用来实现IP、ICMP以及IGMP 5.内核层传输层用来实现TCP和udp协议 6.内核源码中网络设备驱动对应的代码位于dri…

KDZD-100A触摸屏回路电阻测试仪

一、简介 测试仪是根据电力执行标准DL/T845.4-2004&#xff0c;采用高频开关电源技术和数字电路技术相结合设计而成。它适用于开关控制设备回路电阻的测量。其测试电流采用国家标准推荐的直流100A。可在电流100A的情况下直接测得回路电阻&#xff0c;并用数字显示出来。测量准确…

劝你们不要去外包,两年外包生涯做完,感觉自己废了一半....

先说一下自己的情况。大专生&#xff0c;17年通过校招进入湖南某软件公司&#xff0c;干了接近5年的点点点&#xff0c;今年年上旬&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01;而我已经在一个企业干了五年的功能测试…

​TPAMI 2023 | 无监督域适应语义分割新视角:统一图像和特征层次的对齐

©PaperWeekly 原创 作者 | 陈超奇 单位 | 香港大学 研究方向 | 迁移学习 论文标题&#xff1a; I2F: A Unified Image-to-Feature Approach for Domain Adaptive Semantic Segmentation 论文链接&#xff1a; https://arxiv.org/abs/2301.01149&#xff08;预印版&#x…

了解微服务技术栈

在了解微服务技术栈之前&#xff0c;我们先通过图片去了解微服务技术的类别。 微服务技术体系 技术栈模块图 微服务技术对比 服务框架 用JAVA技术开发微服务&#xff0c;比较主流的选择有&#xff1a;Spring Cloud 和 Dubbo。 Spring Cloud是在Spring基础上构建的&#xff0c;…

机器学习之朴素贝叶斯二、情感分析实践

目录标题 一、什么是朴素贝叶斯&#xff1f;二、利用朴素贝叶斯进行情感分析1. 数据类别说明2. 什么是词袋模型3. 数据展示4. 利用词袋模型进行词表构建5. 到了这一步&#xff0c;我们的前期工作都已经准备好了&#xff0c;有了样本的向量化数据&#xff0c;开始进行 朴素贝叶斯…

2023年北京.NET线下技术沙龙来了!大咖分享,还有精品好礼等你

MASA技术团队来北京啦&#xff01; 为了与北京的.NET开发者们更深入的交流学习&#xff0c;我们将在北京市举办一场.NET线下技术沙龙。同时也是希望通过举办这样的线下沙龙&#xff0c;让更多的.NET开发者了解我们&#xff0c;加入.NET开源技术生态&#xff0c;向更多的.NET开…

SpringCloud-服务间通信OpenFeignRibbon

服务间通信&OpenFeign&Ribbon 一、服务间通信1.创建两个服务并注册到服务中心1.1.服务添加相关依赖1.2.编写配置文件application.yml1.3.入口类加上注解启动Eureka Client 2.Product服务中提供调用方法3.User服务中使用RestTemplate调用 二、负载均衡及Ribbon组件1.负载…

《三》包管理工具

包管理工具 npm&#xff1a; npm&#xff1a;Node Package Manager&#xff0c;Node 包管理器&#xff0c;目前已经不仅仅作为 Node 的包管理工具&#xff0c;也作为前端的包管理工具来管理包。 npm 管理的包是存放在一个名为 registry 的仓库中的&#xff0c;发布一个包时是…