当前位置: 首页 > news >正文

(前缀和) LeetCode 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 <= 105
  • -30 <= nums[i] <= 30
  • 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内

二. 解题思路

本题意思是计算每一个nums[i]的值,其中nums[i] 的值为除自身以外的其他值的乘积。

首先我们定义两个数组 left 和 right ,其中 left 数组用来计算数组的前缀和,right 数组用来计算数组的后缀和,至于最终计算结果我们只需要在原数组上操作即可,省略了空间的浪费,nums[i] 的最终结果就等于nums[i - 1] 的前缀和乘 nums[i + 1] 的后缀和,即 nums[i]  = left[i - 1] * right[i + 1]。

但是在计算nums[0] 和nums[n - 1] 的时候我们发现会出现数组越界错误,所以我们将 left 数组元素统一后移一位,然后将 left[0] 赋予 1,将 right 数组扩展一位,right[n] 赋予1 。所以就可以得出:nums[i] = left[i] * right[i + 1] (原本是 left[i - 1] * right[i + 1],但是 left 元素统一后移一位,所以下标也会移动,但是 right  数组只是扩展,对下标未改动);

运算过程如图所示:

三. 代码

class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int n = nums.size();int sum = 0;vector<int> left(n + 1);vector<int> right(n + 1);left[0] = 1;right[n] = 1;for(int i = 0; i < n; i++){left[i + 1] = nums[i] * left[i];}for(int i = n - 1; i >= 0; i--){right[i] = right[i + 1] * nums[i];}for(int i = 0; i < n; i++){nums[i] = left[i] * right[i + 1];}return nums;}
};

四. 总结

本题属于前缀和和后缀和的集合考察,属于中等题目,大家可以练习一下,但是一定要考虑在左右位置计算的时候的越界问题。

时间复杂度:O(n);

空间复杂度:O(n);

爱思考的小伙伴可以想一下本题如何用O(1)的空间复杂度实现,欢迎评论!

喜欢的话给个关注吧!!

相关文章:

(前缀和) LeetCode 238. 除自身以外数组的乘积

一. 题目描述 原题链接 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&…...

【JVM基础05】——组成-能不能解释一下方法区?

目录 1- 引言&#xff1a;方法区概述1-1 方法区是什么&#xff1f;(What)1-2 为什么用方法区&#xff1f;方法区的作用 (Why) 2- ⭐核心&#xff1a;详解方法区(How)2-1 能不能解释一下方法区&#xff1f;2-2 元空间内存溢出问题2-3 什么是常量池&#xff1f;2-4 运行时常量池 …...

前端:Vue学习-3

前端&#xff1a;Vue学习-3 1. 自定义指令2. 插槽2.1 插槽 - 后备内容&#xff08;默认值&#xff09;2.2 插槽 - 具名插槽2.3 插槽 - 作用域插槽 3. Vue - 路由3.1 路由模块封装3.2 声明式导航 router-link 高亮3.3 自定义匹配的类名3.4 声明式导肮 - 跳转传参3.5 Vue路由 - 重…...

npm 安装报错(已解决)+ 运行 “wue-cli-service”不是内部或外部命令,也不是可运行的程序(已解决)

首先先说一下我这个项目是3年前的一个项目了&#xff0c;中间也是经过了多个人的修改惨咋了布置多少个人的思想&#xff0c;这这道我手里直接npm都安装不上&#xff0c;在网上也查询了多种方法&#xff0c;终于是找到问题所在了 问题1&#xff1a; 先是npm i 报错在下面图片&…...

江苏科技大学24计算机考研数据速览,有专硕复试线大幅下降67分!

江苏科技大学&#xff08;Jiangsu University of Science and Technology&#xff09;&#xff0c;坐落在江苏省镇江市&#xff0c;是江苏省重点建设高校&#xff0c;江苏省人民政府与中国船舶集团有限公司共建高校&#xff0c;国家国防科技工业局与江苏省人民政府共建高校 &am…...

20分钟上手新版Skywalking 9.x APM监控系统

Skywalking https://skywalking.apache.org/ Skywalking是专为微服务、云原生和基于容器的&#xff08;Kubernetes&#xff09;架构设计的分布式系统性能监控工具。 Skywalking关键特性 ● 分布式跟踪 ○ 端到端分布式跟踪。服务拓扑分析、以服务为中心的可观察性和API仪表板。…...

【07】LLaMA-Factory微调大模型——微调模型导出与微调参数分析

上文介绍了如何对微调后的模型进行使用与简单评估。本文将介绍对微调后的模型进行导出的过程。 一、llama-3微调后的模型导出 首先进入虚拟环境&#xff0c;打开LLaMA-Factory的webui页面 conda activate GLM cd LLaMA-Factory llamafactory-cli webui 之后&#xff0c;选择…...

动态路由协议 —— EIGRP 与 OSPF 的区别

EIGRP&#xff08;增强内部网关路由协议&#xff09;和 OSPF&#xff08;开放式最短路径优先&#xff09;是两种最常见的动态路由协议&#xff0c;主要是用来指定路由器或交换机之间如何通信。将其应用于不同的情况下&#xff0c;可提高速率、延迟等方面的性能。那么它们之间到…...

【中项】系统集成项目管理工程师-第5章 软件工程-5.1软件工程定义与5.2软件需求

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…...

HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 多选题序号1

基础认证题库请移步&#xff1a;HarmonyOS应用开发者基础认证题库 注&#xff1a;有读者反馈&#xff0c;题库的代码块比较多&#xff0c;打开文章时会卡死。所以笔者将题库拆分&#xff0c;单选题20个为一组&#xff0c;多选题10个为一组&#xff0c;题库目录如下&#xff0c;…...

Windows11(24H2)LTSC长期版下载!提前曝光Build26100?

系统&#xff1b;windows11 文章目录 前言一、LTSC是什么&#xff1f;二、 Windows 11 Vision 24H2 LTSC 的版本号为 Build 26100&#xff0c;镜像中提供以下三个 SKU&#xff1a;总结 前言 好的系统也能给你带来不一样的效果。 一、LTSC是什么&#xff1f; & & L…...

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十三章 驱动模块传参

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…...

uniapp 小程序 支付逻辑处理

uniapp 小程序 支付逻辑处理 上代码如果你不需要支付宝适配&#xff0c;可以删除掉支付宝的条件判断代码 <button class"subBtn" :disabled"submiting" click"goPay">去支付</button>// 以下代码你需要改的地方// 1. order/app/v1…...

scikit-learn库学习之make_regression函数

scikit-learn库学习之make_regression函数 一、简介 make_regression是scikit-learn库中用于生成回归问题数据集的函数。它主要用于创建合成的回归数据集&#xff0c;以便在算法的开发和测试中使用。 二、语法和参数 sklearn.datasets.make_regression(n_samples100, n_feat…...

经典文献阅读之--World Models for Autonomous Driving(自动驾驶的世界模型:综述)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务&#xff0c;并且需要GPU资源&#xff0c;可以考虑使用UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收费每卡2.6元&#xff0c;月卡只需要1.7元每小时&…...

孙健提到的实验室的研究方向之一是什么?()

孙健提到的实验室的研究方向之一是什么?&#xff08;&#xff09; 点击查看答案 A.虚拟现实B.环境感知和理解 C.智能体博弈D.所有选项都正确 图灵奖是在哪一年设立的?&#xff08;&#xff09; A.1962B.1966 C.1976D.1986 孙健代表的实验室的前身主要研究什么?&…...

初级java每日一道面试题-2024年7月23日-Iterator和ListIterator有什么区别?

面试官: Iterator和ListIterator有什么区别? 我回答: Iterator和ListIterator都是Java集合框架中用于遍历集合元素的接口&#xff0c;但它们之间存在一些关键的区别&#xff0c;主要体现在功能和使用场景上。下面我将详细解释这两种迭代器的不同之处&#xff1a; 1. Iterat…...

2024-07-23 Unity AI行为树2 —— 项目介绍

文章目录 1 项目介绍2 AI 代码介绍2.1 BTBaseNode / BTControlNode2.2 动作/条件节点2.3 选择 / 顺序节点 3 怪物实现4 其他功能5 UML 类图 项目借鉴 B 站唐老狮 2023年直播内容。 点击前往唐老狮 B 站主页。 1 项目介绍 ​ 本项目使用 Unity 2022.3.32f1c1&#xff0c;实现基…...

Unity-URP-SSAO记录

勾选After Opacity Unity-URP管线&#xff0c;本来又一个“bug”, 网上查不到很多关于ssao的资料 以为会不会又是一个极度少人用的东西 而且几乎都是要第三方替代 也完全没有SSAO大概的消耗是多少&#xff0c;完全是黑盒(因为用的人少&#xff0c;研究的人少&#xff0c;优…...

无人机上磁航技术详解

磁航技术&#xff0c;也被称为地磁导航&#xff0c;是一种利用地球磁场信息来实现导航的技术。在无人机领域&#xff0c;磁航技术主要用于辅助惯性导航系统&#xff08;INS&#xff09;进行航向角的测量与校正&#xff0c;提高无人机的飞行稳定性和准确性。其技术原理是&#x…...

C51可重入函数原理与实践指南

1. 理解C51中的可重入函数概念 在8051单片机开发中&#xff0c;可重入函数(Reentrant Function)是一个关键但常被误解的概念。与通用计算机上的C语言开发不同&#xff0c;由于8051架构的特殊限制&#xff0c;标准C51函数默认都是不可重入的。这源于8051硬件设计的几个固有特点&…...

如何成为年薪百万的AI算法工程师?字节跳动AI Lab的内部指南

一、破局&#xff1a;软件测试从业者的AI算法工程师转型契机 在AI技术浪潮的席卷下&#xff0c;软件测试行业正经历着深刻变革&#xff0c;同时也为从业者打开了通往AI算法工程师领域的大门。2026年数据显示&#xff0c;AI在测试行业的渗透率已超40%&#xff0c;新发AI测试岗位…...

UE5新手必看:给你的自定义Pawn加上碰撞,别再让它“穿墙”了!

UE5碰撞系统实战&#xff1a;从零构建防穿墙Pawn的完整指南 当你在UE5中第一次创建自定义Pawn时&#xff0c;最令人沮丧的莫过于看着自己精心设计的角色像幽灵一样穿过墙壁和障碍物。这种"穿模"现象不仅破坏游戏体验&#xff0c;更会导致后续游戏逻辑的全面崩溃。本文…...

CodeDroidAI:本地化AI代码助手的设计原理与工程实践

1. 项目概述&#xff1a;一个面向开发者的AI代码助手最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“FMXExpress/CodeDroidAI”。光看这个名字&#xff0c;可能有点摸不着头脑&#xff0c;但如果你是个经常和代码打交道的开发者&#xff0c;尤其是对提升编码效率、探索A…...

基于Vercel AI SDK与Next.js 14构建智能编程助手:从架构到部署实战

1. 项目概述&#xff1a;一个面向开发者的AI编程助手脚手架最近在GitHub上看到一个挺有意思的项目&#xff0c;叫vercel-labs/coding-agent-template。光看名字&#xff0c;你大概能猜到&#xff0c;这是一个跟AI编程助手相关的模板项目。没错&#xff0c;它本质上是一个预先配…...

如何零代码构建专业级在线PPT编辑工具:5大核心技术解析

如何零代码构建专业级在线PPT编辑工具&#xff1a;5大核心技术解析 【免费下载链接】PPTist PowerPoint-ist&#xff08;/pauəpɔintist/&#xff09;, An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing f…...

基于MCP协议构建安全AI支付工具:从原理到实践

1. 项目概述与核心价值最近在折腾AI智能体开发&#xff0c;特别是想给Claude Desktop这类工具增加点“超能力”&#xff0c;比如让它能直接帮我处理支付、查询订单状态&#xff0c;甚至自动对账。这想法听起来挺酷&#xff0c;但真动手去实现&#xff0c;发现最大的拦路虎不是写…...

5.【Python】Python3 运算符

第一步&#xff1a;分析与整理 运算符1. 什么是运算符&#xff1f; 运算符用于执行算术、比较、逻辑等操作。操作数是参与运算的值。例如 4 5 9 中&#xff0c;4 和 5 是操作数&#xff0c; 是运算符。 Python 支持以下运算符类型&#xff1a; 算术运算符比较&#xff08;关系…...

2026春招AI人才争夺战白热化!小白程序员如何抓住13万高薪机遇?速收藏!

2026年春招显示AI领域岗位量同比增长8.7倍&#xff0c;成为职场新风口。具身智能岗位薪资暴增&#xff0c;AI科学家月薪高达13.2万元。高薪AI岗位紧缺&#xff0c;程序员需拥抱AI工具提升竞争力&#xff0c;否则面临被替代风险。AI能力已成为职场基础设施&#xff0c;不学AI可能…...

3个关键指标揭示:你的游戏手柄响应速度是否拖了后腿?

3个关键指标揭示&#xff1a;你的游戏手柄响应速度是否拖了后腿&#xff1f; 【免费下载链接】XInputTest Xbox 360 Controller (XInput) Polling Rate Checker 项目地址: https://gitcode.com/gh_mirrors/xin/XInputTest 在竞技游戏的激烈对决中&#xff0c;每一毫秒的…...