leetcode热题HOT 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]

二、解题思路:

  1. 利用前缀乘积和后缀乘积的方法能够在 O(n) 的时间复杂度内解决问题,避免使用嵌套循环来计算乘积。
  2. 具体步骤:
    ①在第一次遍历中,先将结果数组 res 的第一个元素设为1,然后从第二个元素开始,将当前位置的值设为前一个位置的值乘以前一个元素的值,即 res[i] = res[i - 1] * nums[i - 1],这样 res[i] 就记录了当前位置之前所有元素的乘积。
    ②在第二次遍历中,定义变量 next 初始值为1,从数组末尾开始遍历数组,每次将当前位置的元素值乘上 next,这样就得到了后缀乘积,最终的结果为前缀乘积与后缀乘积的乘积。

三、代码示例:

//时间复杂度为 O(n)
class Solution {public int[] productExceptSelf(int[] nums) {int[] res = new int[nums.length];//int pre = 1;res[0] = 1;for(int i = 1; i < nums.length; i++){//res[i] = pre;  //pre *= nums[i]; //前缀乘积res[i] = res[i - 1] * nums[i - 1];//System.out.println(res[i]);}int next = 1;for(int j = nums.length - 1; j >= 0; j--){res[j] = res[j] * next; //前缀乘后缀next *= nums[j];  //后缀乘积//System.out.println(res[j]);}return res;}
}
  • 时间复杂度分析:这段代码需要两次遍历数组,所以时间复杂度为 O(n),其中 n 为数组的长度。
    空间复杂度 O(1)。

四、补充与总结:

利用前缀乘积:
第一次遍历计算每个元素的前缀乘积,并将结果存储在数组 res 中,这样 res[i] 就表示了位置 i 左侧所有元素的乘积。这种方法避免了在每次计算位置 i 时都重新计算左侧所有元素的乘积。
利用后缀乘积:
第二次遍历时,从数组末尾开始计算每个元素的后缀乘积,并将其乘到之前计算得到的前缀乘积中,最终得到的结果即为除自身以外数组中所有元素的乘积。这种方法避免了在每次计算位置 i 时都重新计算右侧所有元素的乘积。

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

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

相关文章

web游戏-飞机大战

H5小游戏源码、JS开发网页小游戏开源源码大合集。无需运行环境,解压后浏览器直接打开。有需要的,私信本人,发演示地址,可以后再订阅,发源码,含60+小游戏源码。如五子棋、象棋、植物大战僵尸、开心消消乐、扑鱼达人、飞机大战等等 <!DOCTYPE html> <html lang=&q…

Golang简介与基本语法介绍

Go语言&#xff08;通常称为Golang&#xff09;是由Google开发的一种静态强类型、编译型、并发性强的编程语言。Go语言的设计初衷是为了提高大型软件系统的开发效率&#xff0c;并解决其他编程语言在处理多核处理器、网络系统和大型代码库时遇到的一些问题。 一、Go语言的特点…

防止 服务器 被爆破 登录的 方法

防止 服务器 被爆破 登录的 方法 Centos8防止云服务器被爆破登录的应对办法 https://blog.csdn.net/qq_64573330/article/details/126948166

【牛客】SQL136 每类试卷得分前3名-窗口函数

描述 现有试卷信息表examination_info&#xff08;exam_id试卷ID, tag试卷类别, difficulty试卷难度, duration考试时长, release_time发布时间&#xff09;&#xff1a; idexam_idtagdifficultydurationrelease_time19001SQLhard602021-09-01 06:00:0029002SQLhard602021-09…

请解释Netty中的Pipeline和ChannelHandler,以及它们是如何工作的?如何在Netty中实现消息的编解码?有哪些常用的编解码器?

请解释Netty中的Pipeline和ChannelHandler&#xff0c;以及它们是如何工作的&#xff1f; 在Netty中&#xff0c;Pipeline和ChannelHandler是两个核心概念&#xff0c;它们共同协作来处理网络事件和数据流。 Pipeline&#xff08;管道&#xff09; Pipeline可以看作是一个处理…

ardupilot 及PX4姿态误差计算算法对比分析

目录 文章目录 目录摘要1.APM姿态误差计算算法2.PX4姿态误差计算算法3.结论摘要 本节主要记录ardupilot 及PX4姿态误差计算算法差异对比过程,欢迎批评指正。 备注: 1.创作不易,有问题急时反馈 2.需要理解四元物理含义、叉乘及点乘含义、方向余弦矩阵含义、四元数乘法物理含…

sklearn函数:train_test_split(分割训练集和测试集)

函数的功能是分割训练集和测试集 函数中参数的用法&#xff1a; 1. test_size&#xff1a;float or int, defaultNone 测试集的大小&#xff0c;如果是小数的话&#xff0c;值在&#xff08;0,1&#xff09;之间&#xff0c;表示测试集所占有的比例&#xff1b; 如果是整数…

java字符流

1、FileWriter写数据 public static void main(String[] args) throws IOException {FileWriter fw new FileWriter("os\\a.txt");fw.write("大得");//数组写法char[] chs {a, b, c, d, e};fw.write(chs);fw.close();}2、FileReader 读数据 public stati…

2024年2核4G服务器优惠价格,选阿里云还是腾讯云?

2核4G云服务器选阿里云还是腾讯云&#xff1f;2核4G服务器多少钱一年&#xff1f;1个月费用价格&#xff1f;腾讯云轻量2核4G5M带宽服务器165元一年、252元15个月、三年756元&#xff0c;阿里云2核4G4M带宽轻量服务器165元12个月、ECS云服务器2核4G配置30元3个月、2核4G5M带宽1…

MySQL 多表查询 连接查询 自连接

介绍 自连接查询&#xff0c;可以是内连接查询&#xff0c;也可以是外连接查询&#xff0c;一句话自己连接自己&#xff0c;一个表当作两个表进行连接。 语法 SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件两个表A说明是同一张表&#xff0c;但是别名不同 案例…

文献速递:深度学习疾病预后--使用深度学习对数字病理图像进行胃癌的准确诊断和预后预测:一项回顾性多中心研究

Title 题目 Accurate diagnosis and prognosis prediction of gastric cancer using deep learning on digital pathological images: A retrospective multicentre study 使用深度学习对数字病理图像进行胃癌的准确诊断和预后预测&#xff1a;一项回顾性多中心研究 01 文献…

OpenMMlab AI实战营第四期培训

OpenMMlab AI实战营第四期培训 OpenMMlab实战营第四次课2023.2.6学习参考一、什么是目标检测1.目标检测下游视觉任务2.图像分类 v.s. 目标检测 二、目标检测实现1.滑窗 Sliding Window2.滑窗的效率问题3.改进思路&#xff08;1&#xff09;消除滑窗中的重复计算&#xff08;2&a…

x6.js 流程图绘制笔记,常用函数

官方参考网站如下&#xff1a;https://antv-x6.gitee.io/zh/docs/tutorial/about 安装x6 输入以下命令 npm install antv/x6 --save 引用插件代码如下&#xff1a; import { Graph } from antv/x6; 创建绘制区域 this.guiX6 new Graph({container: document.querySelect…

【MGR】MySQL Group Replication 背景

目录 17.1 Group Replication Background 17.1.1 Replication Technologies 17.1.1.1 Primary-Secondary Replication 17.1.1.2 Group Replication 17.1.2 Group Replication Use Cases 17.1.2.1 Examples of Use Case Scenarios 17.1.3 Group Replication Details 17.1…

EdgeX Foundry 安全模式安装部署

文章目录 一、安装准备1.官方文档2. 克隆服务器3.安装 Docker4.安装 docker-compose 二、安装部署1.docker-comepse2.启动 EdgeX Foundry3.访问 UI3.1. consul3.2. EdgeX Console EdgeX Foundry # EdgeX Foundryhttps://iothub.org.cn/docs/edgex/ https://iothub.org.cn/docs…

Java IO流详解(史上最全18个案例代码)

每文一句 每想拥抱你一次&#xff0c;天空飘落一片雪&#xff0c;至此雪花拥抱撒哈拉&#xff01; —荷西 一、IO流开篇 1. 概念&#xff1a; IO&#xff08;Input/Output&#xff09;流是Java中用于处理输入和输出数据的机制。它允许程序与外部设备&#xff08;如文件、网络…

基于springboot的新闻稿件管理系统论文

新闻稿件管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了新闻稿件管理系统的开发全过程。通过分析新闻稿件管理系统管理的不足&#xff0c;创建了一个计算机管理新闻稿件管理系统的方案。文章介绍了新…

适用于ZigBee应用的JN5168/001K、JN5188HN、JN5188THN/001Z、JN5189THN超低功耗射频微控制器MCU

一、JN5168/001K 适用于ZigBee应用的超低功耗、高性能无线微控制器 JN5168是超低功耗、高性能无线微控制器&#xff0c;适用于ZigBee应用&#xff0c;它具有256kB嵌入式闪存、32 kB RAM&#xff0c;无需外部存储器即可进行OTA升级。32位RISC处理器可通过不同宽度指令、多级指令…

稀碎从零算法笔记Day5-LeetCode:多数元素

题型&#xff1a;数组、计数、排序、STL函数、查找众数 链接&#xff1a;169. 多数元素 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 题目描述 给定一个大小为 n …

win11更新后切换桌面有了动画效果,如何单独关闭这个动画效果

按住Windows&#xff0b;R键&#xff0c;输入sysdm.cpl并按Enter。 转到“高级”选项卡&#xff0c;单击“性能”部分的“设置”按钮。 接下来&#xff0c;在“视觉效果”页面中&#xff0c;单击“自定义”&#xff0c;然后取消选中&#xff1a;对窗口内的控件和元素进行动画处…