Leetcode 238. Product of Array Except Self

news/2026/1/21 21:53:51/文章来源:https://www.cnblogs.com/cxy11-blog/p/19514140

问题理解

给定一个整数数组 nums,要求返回一个新数组 answer,其中 answer[i] 是除 nums[i] 以外所有元素的乘积。

注意,有0存在。

思路

第一个想法是类似sliding window法,先算第 1~(n-1) 个元素的乘积,作为ans[0],后续ans[i]就乘nums[i-1]除nums[i]。问题是遇到0时,不能除0,只能从头跳过nums[i]重新算乘积。在这种情况下算法复杂度最差会退化到 \(O(n^2)\)

所以要用一个新的算法,前缀乘积+后缀乘积,时间空间复杂度都是 \(O(n)\);

前缀乘积+后缀乘积分两遍扫描:

  1. 第一遍:从左到右,计算每个位置左边所有元素的乘积(前缀),存入结果数组。
  2. 第二遍:从右到左,维护一个变量记录右边所有元素的乘积(后缀),并将其与结果数组中已有的前缀相乘,得到最终答案。

这样既避免了除法,又保证 O(n) 时间、O(1) 额外空间(输出数组不算)。

trick

  1. 处理 0 的关键:不需要特殊判断 0!前缀/后缀乘积天然处理了 0 的情况。例如,若 nums[i] = 0,则其左侧前缀和右侧后缀正常计算,相乘即为其他元素的乘积(可能为 0,也可能非 0,逻辑自洽)。
  2. 空间优化:直接用输出数组 ans 存储前缀乘积,再用一个变量 rightProduct 动态维护后缀,实现 O(1) 额外空间。
  3. 初始化技巧ans[0] = 1(左边无元素,乘积为 1),rightProduct = 1(右边初始无元素)。

Code

class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int n = nums.size();vector<int> ans(n);ans[0] = 1;// 前缀:ans[i] = nums[0] * ... * nums[i-1]for (int i = 1; i < n; ++i) {ans[i] = ans[i - 1] * nums[i - 1];}int rightProduct = 1;// 后缀:ans[i] *= (nums[i+1] * ... * nums[n-1])for (int i = n - 1; i >= 0; --i) {ans[i] *= rightProduct;rightProduct *= nums[i];}return ans;}
};

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

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

相关文章

电脑win11系统怎么关闭自动更新,win11暂停和关闭系统自动更新6大招轻松搞定

Windows 11的自动更新功能&#xff0c;初衷是为了提升系统安全与性能。但在实际使用中&#xff0c;频繁的后台下载和强制重启往往让人困扰&#xff0c;尤其是对正在工作、游戏或需要稳定环境的用户来说&#xff0c;更是不可忽视的问题。因此&#xff0c;学会灵活地关闭或延迟自…

Oracle数据库迁移至KingbaseES:完整实战指南

Oracle数据库迁移至KingbaseES&#xff1a;完整实战指南 KingbaseES内部提供了大量的Oracle兼容特性&#xff0c;因此&#xff0c;在实际的迁移过程中&#xff0c;一般只需对导出脚本做很少的修改&#xff0c;甚至在迁移对象功能全兼容的情况下可以不做任何修改。不仅如此&…

【异常】FreeMarker 模板文件找不到问题解决方案 Template not found for name “mail/captcha.ftl“.

一、报错内容 cn.hutool.core.io.IORuntimeException: TemplateNotFoundException: Template not found for name "mail/captcha.ftl". The name was interpreted by this TemplateLoader: ClassTemplateLoader(classLoader="jdk.internal.loader.ClassLoaders…

保姆级教程:Ubuntu搭建本地AI助手,从Docker到DeepSeek-R1一站式指南,建议收藏!

本文主要介绍如何在Ubuntu操作系统环境下&#xff0c;零基础快速安装Docker环境、安装Ollama、安装本地大模型DeepSeek-R1和大模型可视化工具Open WebUI&#xff0c;快速在本地搭建一款专属AI智能小助手。 1.检查Docker环境 检查是否已安装docker运行环境&#xff0c;在控制台…

NAS —— Centos8挂载Nas到本地目录使用(多图完整教程)

需求与结果 需求:有一台Centos8台式机、一台Synology Nas(DS821),需要将Nas挂载到Centos8上目录上进行使用。 最终结果: 步骤 1、首先保证Centos8可以ping通NAS设备、同时可在Centos8上访问NAS网页端。        2、进入NAS网页操作 (1) 进入DSM控制面板 → 共享文件…

由特殊到一般

lc3301 从最大元素开始贪心 对数组降序排序后&#xff0c;让每个元素不超过前一个元素减1 若出现非正数则返回-1&#xff0c;否则计算数组元素总和 class Solution { public: long long maximumTotalSum(vector<int>& maximumHeight) { ranges::sort(max…

【AI+教育】实践:从策略优化到群体应用的探索

例如&#xff0c;有研究聚焦智能苏格拉底绘画机器人的开发。该机器人内置苏格拉底对话模式&#xff0c;这是一种古老的对话模式。苏格拉底的对话模式&#xff0c;主张通过不断追问&#xff0c;引导人们对自身所做之事进行更深层次的反思与思考。研究通过苏格拉底追问式构建多智…

深入解析:基于势场法的多智能体机器人编队控制

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

吐血推荐8个AI论文软件,助你轻松搞定本科生毕业论文!

吐血推荐8个AI论文软件&#xff0c;助你轻松搞定本科生毕业论文&#xff01; AI工具让论文写作不再难 对于许多本科生来说&#xff0c;撰写毕业论文是一项既复杂又充满挑战的任务。从选题到资料收集&#xff0c;从大纲搭建到初稿完成&#xff0c;每一个环节都可能让人感到手足无…

揭秘提示工程架构师在电子商务应用的领先策略

揭秘提示工程架构师在电子商务应用的领先策略&#xff1a;开启电商智能新时代 关键词&#xff1a;提示工程架构师、电子商务、语言模型、用户体验、个性化推荐、智能客服 摘要&#xff1a;本文深入探讨提示工程架构师在电子商务领域的关键作用及其领先策略。通过生动的比喻和…

SDL2库基础使用

1.初始化 SDL2 子系统(视频相关),失败则打印错误并返回 -1 if (SDL_Init(SDL_INIT_VIDEO)) {fprintf(stderr, "SDL_Init: %s\n", SDL_GetError()); // 输出初始化失败原因return -1; // 返回错误码 }2.…

android 系统中间件和 平台中间件 的区别,Framework等

这是一个非常专业的问题&#xff0c;涉及到Android系统架构的核心层次。简单来说&#xff0c;平台中间件是通用、标准化的“官方层”&#xff0c;而系统中间件是厂商深度定制、差异化的“优化层”。 下面我通过一个表格来清晰地概括两者的主要区别&#xff0c;然后再详细解释&a…

宝妈宝爸必看!儿童羽绒服十大名牌揭秘

宝妈宝爸必看!儿童羽绒服十大名牌揭秘开篇引入 家人们,冬天的寒风那叫一个凛冽,每次带娃出门,看着孩子被冻得小脸蛋红扑扑的,当家长的真是心疼!给孩子选一件暖和又靠谱的羽绒服,就成了咱当务之急。可市场上儿童…

【Script】加载工程文件

【Script】加载工程文件 引言 正文 调用方法。 加载当前目录下的文件 加载存放在特定目录下的文件 Author: JiJi \textrm{Author: JiJi} Author: JiJi Created Time: 2026.01.21 \textrm{Created Time: 2026.01.21} Created Time: 2026.01.21

2026元宝优化服务商TOP6推荐——AI搜索时代精准破局指南

2026 元宝优化GEO服务商TOP6推荐——AI搜索时代精准破局指南 2026年,AI原生搜索已成为流量核心入口,GEO(生成式引擎优化)不再是营销增效的可选工具,而是企业数字化生存的刚需能力。从AI搜索排名优化、AI SEO优化到…

详细解释 — Verilog中非阻塞赋值为什么能解决时序逻辑里的“寄存器之间竞争 / 读写不一致” - 详解

详细解释 — Verilog中非阻塞赋值为什么能解决时序逻辑里的“寄存器之间竞争 / 读写不一致” - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block…

2026/1/21

2026/1/211.VSCODE中!+enter=前端模板 2.注释:ctrl+/ 3. 4.标题:到 5.颜色表示:CSS引入方式 • 行内样式: • 内部样式: • 外部样式: xxx.css 颜色表示 • 关键字: red、green . . . • rgb表示法: rgb(…

宝妈宝爸闭眼入!2026十大儿童鞋服品牌大揭秘

宝妈宝爸闭眼入!2026十大儿童鞋服品牌大揭秘一.开篇痛点引入 家有萌娃,每次给孩子挑选鞋服都像是一场 “大战”。一方面担心面料不安全,伤害孩子娇嫩肌肤;另一方面,孩子长得快,鞋服更新频繁,预算得精打细算 。款…

奇迹漫步:促进团队协作的意外方式

奇迹漫步&#xff1a;促进团队协作的意外方式 关键词&#xff1a;团队协作、奇迹漫步、团队沟通、团队凝聚力、创新协作方式 摘要&#xff1a;本文聚焦于“奇迹漫步”这一促进团队协作的意外方式。首先介绍了文章的背景&#xff0c;包括目的、预期读者、文档结构和相关术语。接…

2026最新草本防脱精华国货品牌top6推荐!国内优质防脱护理产品权威榜单发布,科学防脱方案助力健康秀发.

当代社会,生活压力增大、作息不规律以及产后身体变化等因素,使得女性脱发问题日益普遍,宝妈、油头人群、干枯受损发质人群以及女性脱发人群对安全有效的防脱产品需求迫切。据中国美发美容协会最新行业报告显示,国内…