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

LeetCode 每日一题笔记 日期:2025.03.24 题目:2906.构造乘积矩阵

LeetCode 每日一题笔记0. 前言日期2025.03.24题目2906.构造乘积矩阵难度中等标签数组 矩阵 前缀和1. 题目理解问题描述给你一个下标从 0 开始、大小为 n * m 的二维整数矩阵grid定义一个下标从 0 开始、大小为 n * m 的二维矩阵p。如果满足以下条件则称p为grid的乘积矩阵对于每个元素p[i][j]它的值等于除了grid[i][j]外所有元素的乘积且乘积对12345取余数。返回grid的乘积矩阵。示例输入grid [[1,2],[3,4]]输出[[24,12],[8,6]]解释p[0][0] grid[0][1] * grid[1][0] * grid[1][1] 2 * 3 * 4 24p[0][1] grid[0][0] * grid[1][0] * grid[1][1] 1 * 3 * 4 12p[1][0] grid[0][0] * grid[0][1] * grid[1][1] 1 * 2 * 4 8p[1][1] grid[0][0] * grid[0][1] * grid[1][0] 1 * 2 * 3 62. 解题思路核心观察暴力求解的问题若直接对每个元素grid[i][j]遍历所有元素计算乘积排除自身时间复杂度为O((n∗m)2)O((n*m)^2)O((n∗m)2)。当矩阵规模较大时如 n、m 为 1000计算量会达到101210^{12}1012级别远超时间限制且多次乘法会导致数值溢出即使取模也无法降低时间复杂度。前缀/后缀乘积优化将二维矩阵展平为一维数组通过「前缀乘积数组」和「后缀乘积数组」快速计算每个位置排除自身的总乘积前缀乘积pre[i]表示一维数组中前i个元素的乘积包含i后缀乘积suf[i]表示一维数组中从i到末尾的乘积包含i对于位置k排除自身的总乘积 前缀乘积pre[k-1]* 后缀乘积suf[k1]边界位置单独处理。算法步骤展平矩阵将二维矩阵grid转换为一维数组arr便于统一计算前缀/后缀乘积计算前缀乘积pre[0] arr[0]pre[i] (pre[i-1] * arr[i]) % 12345计算后缀乘积suf[len-1] arr[len-1]suf[i] (suf[i1] * arr[i]) % 12345重构结果矩阵遍历每个位置根据前缀/后缀乘积计算排除自身的总乘积转换回二维矩阵并取模。3. 代码实现packagecom.sheeta1998.lec.lc2906;classSolution{publicint[][]constructProductMatrix(int[][]grid){intngrid.length;// 矩阵行数intmgrid[0].length;// 矩阵列数inttotaln*m;// 一维数组总长度int[]arrnewint[total];int[]prenewint[total];// 前缀乘积数组int[]sufnewint[total];// 后缀乘积数组// 步骤1将二维矩阵展平为一维数组intidx0;for(inti0;in;i){for(intj0;jm;j){arr[idx]grid[i][j];}}// 步骤2计算前缀乘积pre[0]arr[0]%12345;for(inti1;itotal;i){pre[i](pre[i-1]*arr[i])%12345;}// 步骤3计算后缀乘积suf[total-1]arr[total-1]%12345;for(intitotal-2;i0;i--){suf[i](suf[i1]*arr[i])%12345;}// 步骤4重构乘积矩阵idx0;for(inti0;in;i){for(intj0;jm;j){if(idx0){// 第一个元素只有后缀乘积grid[i][j]suf[1]%12345;}elseif(idxtotal-1){// 最后一个元素只有前缀乘积grid[i][j]pre[total-2]%12345;}else{// 中间元素前缀*后缀grid[i][j](pre[idx-1]*suf[idx1])%12345;}idx;}}returngrid;}}4. 代码优化说明空间优化原代码中prearr/sufarr命名简化为pre/suf变量名更直观取模时机每一步乘法后立即对12345取模避免整数溢出Java 中 int 最大值约2×1092×10^92×109多次乘法易溢出边界处理明确区分第一个/最后一个元素的计算逻辑避免数组越界变量复用直接修改原矩阵grid存储结果无需额外创建二维数组节省空间。5. 复杂度分析时间复杂度O(n×m)O(n×m)O(n×m)。展平矩阵、计算前缀/后缀乘积、重构矩阵均为一次遍历总次数为3×n×m3×n×m3×n×m属于线性时间复杂度空间复杂度O(n×m)O(n×m)O(n×m)。需要额外存储一维数组arr、前缀数组pre、后缀数组suf总空间为3×n×m3×n×m3×n×m可进一步优化为O(1)O(1)O(1)空间直接在二维矩阵上计算前缀/后缀但代码可读性降低。6. 总结暴力求解不可行的原因时间复杂度为O((n×m)2)O((n×m)^2)O((n×m)2)矩阵规模较大时会超时且多次乘法易导致数值溢出核心优化思路利用「前缀/后缀乘积」将时间复杂度降至线性通过展平二维矩阵简化计算逻辑关键细节每一步乘法后取模避免溢出边界位置单独处理防止数组越界。关键点回顾暴力解法因O((n∗m)2)O((n*m)^2)O((n∗m)2)时间复杂度无法通过大规模用例必须用前缀/后缀乘积优化展平二维矩阵是简化前缀/后缀计算的核心技巧最终需还原为二维结果取模操作需在每一步乘法后执行避免整数溢出且满足题目要求。

相关文章:

LeetCode 每日一题笔记 日期:2025.03.24 题目:2906.构造乘积矩阵

LeetCode 每日一题笔记 0. 前言 日期:2025.03.24题目:2906.构造乘积矩阵难度:中等标签:数组 矩阵 前缀和 1. 题目理解 问题描述 给你一个下标从 0 开始、大小为 n * m 的二维整数矩阵 grid,定义一个下标从 0 开始、大小…...

Qwen3-TTS-Tokenizer-12Hz在播客制作中的应用:自动化内容生成方案

Qwen3-TTS-Tokenizer-12Hz在播客制作中的应用:自动化内容生成方案 如果你正在制作播客,或者对内容创作感兴趣,那你一定知道最耗时的环节是什么——不是选题,不是策划,而是后期制作。录制、剪辑、配乐、合成&#xff0…...

WeChatFerry:基于Hook技术的微信自动化框架架构设计与工程实践

WeChatFerry:基于Hook技术的微信自动化框架架构设计与工程实践 【免费下载链接】WeChatFerry 微信逆向,微信机器人,可接入 ChatGPT、ChatGLM、讯飞星火、Tigerbot等大模型。Hook WeChat. 项目地址: https://gitcode.com/GitHub_Trending/we…...

从RealSense到三维世界:深度相机点云生成的终极实践指南

从RealSense到三维世界:深度相机点云生成的终极实践指南 【免费下载链接】librealsense Intel RealSense™ SDK 项目地址: https://gitcode.com/GitHub_Trending/li/librealsense 你是否曾经好奇,如何让二维的像素点"站起来"成为三维世…...

Llama-3.2V-11B-cot惊艳效果:对抽象艺术作品隐含主题的逐层解码推演

Llama-3.2V-11B-cot惊艳效果:对抽象艺术作品隐含主题的逐层解码推演 1. 视觉推理工具概述 Llama-3.2V-11B-cot是基于Meta多模态大模型开发的高性能视觉推理工具,专为双卡4090环境深度优化。该工具不仅修复了视觉权重加载的关键问题,还支持C…...

深入解析@DateTimeFormat与@JsonFormat:Java日期处理的实战指南

1. 为什么需要日期格式化注解 刚入行Java开发时,我最头疼的就是处理日期时间问题。前端传过来的日期字符串五花八门,后端接收时总报400错误;数据库查出来的时间显示也不对劲,返回给前端又变成了一串看不懂的UTC格式。直到我发现了…...

小红书内容采集工具终极指南:如何5分钟掌握无水印下载技巧

小红书内容采集工具终极指南:如何5分钟掌握无水印下载技巧 【免费下载链接】XHS-Downloader 免费;轻量;开源,基于 AIOHTTP 模块实现的小红书图文/视频作品采集工具 项目地址: https://gitcode.com/gh_mirrors/xh/XHS-Downloader…...

MentorBit-Library:嵌入式教育平台的模块化Arduino驱动框架

1. MentorBit-Library 深度技术解析:面向嵌入式教育平台的模块化Arduino驱动框架1.1 项目定位与硬件架构背景MentorBit 是由 Digital Codesign 设计的开源教育型嵌入式开发套件,其核心目标是为电子、自动化与机器人教学提供可扩展、易上手且具备工业级接…...

华为三大核心流程IPD/LTC/ITR实战解析:如何用流程化组织提升10倍效率

华为三大核心流程IPD/LTC/ITR实战解析:如何用流程化组织提升10倍效率 在当今高度竞争的商业环境中,企业效率直接决定了市场竞争力。华为作为全球领先的科技企业,其成功很大程度上归功于三大核心业务流程体系——IPD(集成产品开发&…...

水墨江南模型SolidWorks渲染融合:工业设计中的中国风元素

水墨江南模型SolidWorks渲染融合:工业设计中的中国风元素 最近和几个做工业设计的朋友聊天,大家都有个共同的感受:现在的产品设计,尤其是消费电子和家电,外观越来越“卷”。金属、玻璃、极简线条,看多了总…...

LiteLLM自定义提供商集成终极指南:统一接入任意大语言模型的完整教程

LiteLLM自定义提供商集成终极指南:统一接入任意大语言模型的完整教程 【免费下载链接】litellm Call all LLM APIs using the OpenAI format. Use Bedrock, Azure, OpenAI, Cohere, Anthropic, Ollama, Sagemaker, HuggingFace, Replicate (100 LLMs) 项目地址: h…...

asn1c避坑指南:从ASN.1文件到高效C代码的5个关键步骤

asn1c避坑指南:从ASN.1文件到高效C代码的5个关键步骤 在电信和车联网协议开发中,ASN.1(Abstract Syntax Notation One)作为数据序列化的标准格式被广泛使用。而asn1c作为将ASN.1规范转换为C代码的工具,虽然功能强大&am…...

为什么MySQL执行完Delete操作之后,空间没有释放?从原理到解决方案全解析

前言 在使用MySQL的过程中,很多开发者都遇到过这个困惑:我明明执行了DELETE删除了大量数据,为什么用df -h看磁盘空间,或者用SHOW TABLE STATUS看表的数据大小,一点都没变小?难道MySQL的DELETE是“假删除”…...

指纹识别研究数据集高效方案:如何节省80%数据准备时间

指纹识别研究数据集高效方案:如何节省80%数据准备时间 【免费下载链接】fingerprint-datasets Curated collection of human fingerprint datasets suitable for research and evaluation of fingerprint recognition algorithms. 项目地址: https://gitcode.com/…...

Qwen3.5-4B-Claude-Opus效果展示:算法题解生成+时间复杂度同步说明

Qwen3.5-4B-Claude-Opus效果展示:算法题解生成时间复杂度同步说明 1. 模型能力概览 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是一个专为推理任务优化的轻量级模型,特别擅长处理需要结构化分析和分步骤解答的问题。这个4B参数的模型经过蒸…...

【进阶算法】DFS(7~10)

前言 相信很多人学完基础算法(双指针。滑动窗口,前缀和,递归等等)学习搜索与图论 于是我决定出一个教程,大纲是这样的,主要有回溯,DFS,BFS,图,最短路径这几块难理解,望多支持,点赞。 Day1:回溯总…...

零门槛掌握RPG-JS实战指南:用TypeScript开发浏览器RPG游戏

零门槛掌握RPG-JS实战指南:用TypeScript开发浏览器RPG游戏 【免费下载链接】RPG-JS Framework to create an RPG or MMORPG (with the same code) in the browser with Typescript 项目地址: https://gitcode.com/gh_mirrors/rp/RPG-JS RPG-JS是一个基于Type…...

小白也能用的Qwen3.5-9B:开箱即用,解锁AI图文视频新玩法

小白也能用的Qwen3.5-9B:开箱即用,解锁AI图文视频新玩法 1. 为什么选择Qwen3.5-9B? Qwen3.5-9B是一款强大的多模态AI模型,专为处理文本、图像和视频内容而设计。相比传统AI模型,它有三个突出优势: 多模态…...

Windows 环境下快速部署 MinIO 服务:从基础配置到安全访问

1. Windows 下部署 MinIO 的完整指南 MinIO 是一个高性能的对象存储服务,兼容 Amazon S3 API。它轻量、易部署,特别适合在本地开发环境中使用。对于 Windows 用户来说,MinIO 提供了一个简单的.exe文件,可以快速启动服务。下面我会…...

CST仿真下的石墨烯电磁诱导透明研究:从建模到实现的分析报告

CST仿真eit电磁诱导透明(包括石墨烯的建模) EIT石墨烯电磁诱导透明案例搞EIT仿真的都知道,传统金属结构虽然经典,但石墨烯的可调性才是现在的香饽饽——靠栅压就能调费米能级,相当于给器件装了个电控遥控器,在传感器、慢光器件里简…...

零基础5分钟上手YOLOv13:官版镜像开箱即用,快速检测第一张图片

零基础5分钟上手YOLOv13:官版镜像开箱即用,快速检测第一张图片 1. 为什么选择YOLOv13官版镜像? 1.1 传统部署的痛点 在计算机视觉领域,目标检测一直是个热门方向。但很多初学者往往在第一步——环境配置上就卡住了。传统部署YO…...

面试50场才懂:20道高频题决定成败;面试是双向选择,不是你求着公司给你工作,你要做的是展示自己的价值,和公司互相匹配,不用卑微,大方就好

面了50场终于悟了:99%的面试,翻来覆去就考这20道题! 目录 面了50场终于悟了:99%的面试,翻来覆去就考这20道题! 一、开场破冰&自我认知类(第一印象定基调) 1. 请做一下自我介绍 6. 说说你的优点? 15. 你领导同事对你的评价如何? 19. 说说你的缺点? 二、求职动机…...

AI辅助开发实战:如何用Decagon智能客服提升开发效率与用户体验

在开发智能客服系统的过程中,我和团队曾遇到过不少头疼的问题。最典型的就是,随着业务增长,对话场景越来越复杂,维护一个庞大的“如果-那么”规则库简直是一场噩梦。响应速度也常常因为逻辑判断层级过深而变慢,用户体验…...

2026年最火AI Agent实战:用Python+LangGraph构建“超级研究员”

在2026年,单纯调用大模型API已成过去式。真正的趋势是多智能体协作(Multi-Agent)。本文将带你使用目前生产环境最稳定、最强大的框架 LangGraph,从零构建一个能自主搜索、分析并撰写深度报告的“超级研究员”Agent系统。文末附完整…...

掌握CC Switch模型测试功能:确保AI服务稳定性的完整指南

掌握CC Switch模型测试功能:确保AI服务稳定性的完整指南 【免费下载链接】cc-switch A cross-platform desktop All-in-One assistant tool for Claude Code, Codex & Gemini CLI. 项目地址: https://gitcode.com/GitHub_Trending/cc/cc-switch 你是否曾…...

ZigZag编码实战:如何用C语言实现高效数据压缩(附完整代码)

ZigZag编码实战:如何用C语言实现高效数据压缩(附完整代码) 在数据存储和网络传输领域,压缩算法扮演着至关重要的角色。今天我们要探讨的ZigZag编码,是一种简单却极其高效的有符号整数压缩方案。不同于传统的压缩算法需…...

技术面试辅助新范式:AI驱动的面试智能助手全面解析

技术面试辅助新范式:AI驱动的面试智能助手全面解析 【免费下载链接】interview-coder-withoupaywall-opensource interview-coder-withoupaywall-opensource 项目地址: https://gitcode.com/gh_mirrors/in/interview-coder-withoupaywall-opensource 在当今竞…...

gconv reflect.Value.Convert: value of type float64 cannot be converted to type decimal.Decimal

这是 GoFrame 框架的 gconv 模块 的问题,不是 mapstruct。错误信息 reflect.Value.Convert: value of type float64 cannot be converted to type decimal.Decimal 表明 gconv 无法自动将 float64 转换为 decimal.Decimal 类型。让我搜索相关解决方案:搜…...

Python爬虫+SDPose-Wholebody:网络图片姿态分析

Python爬虫SDPose-Wholebody:网络图片姿态分析 1. 引言 你有没有遇到过这样的情况:需要分析大量网络图片中的人物姿态,但手动标注不仅耗时耗力,还容易出错?无论是健身应用中的动作矫正,还是舞蹈教学中的姿…...

如何实现一套.net系统集成多个飞书应用

第一次接触飞书多应用开发的那个下午,会议室的白板上画满了混乱的线条。左边是HR系统,右边是项目管理,中间夹着财务审批,每个系统都要求独立的飞书应用。技术团队讨论着"OAuth2.0"、"Webhook签名验证"和"…...