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

二刷 LeetCode:152. 乘积最大子数组 416. 分割等和子集 复盘笔记

目录一、152. 乘积最大子数组题目回顾思路复盘核心思路同时维护最大值和最小值易错点 二刷心得二、416. 分割等和子集题目回顾思路复盘核心思路0-1 背包 DP易错点 二刷心得三、两道题的共性总结 二刷收获这两道题是动态规划的经典考点分别代表了带特殊状态的一维 DP和0-1 背包 DP也是面试高频题型。二刷时我们重点拆解思路、优化写法顺便把易错点和通用模板总结清楚。一、152. 乘积最大子数组题目回顾给你一个整数数组nums请你找出数组中乘积最大的非空连续子数组该子数组中至少包含一个数字并返回该子数组所对应的乘积。思路复盘这道题和「最大子数组和」很像但因为负数和 0 的存在直接用单变量 DP 会翻车负数乘以负数会变成正数之前的最小值可能变成最大值。核心思路同时维护最大值和最小值状态定义maxDp[i]以nums[i]结尾的子数组的最大乘积minDp[i]以nums[i]结尾的子数组的最小乘积因为负负得正最小值可能变成最大值状态转移对于每个nums[i]有三种选择只取当前元素nums[i]用之前的最大值乘当前元素maxDp[i-1] * nums[i]用之前的最小值乘当前元素minDp[i-1] * nums[i]状态转移方程plaintextmaxDp[i] max(nums[i], maxDp[i-1] * nums[i], minDp[i-1] * nums[i]) minDp[i] min(nums[i], maxDp[i-1] * nums[i], minDp[i-1] * nums[i])初始状态maxDp[0] minDp[0] nums[0]结果遍历过程中记录的最大值Java 代码实现优化空间版java运行public int maxProduct(int[] nums) { if (nums null || nums.length 0) return 0; int max nums[0], min nums[0], result nums[0]; for (int i 1; i nums.length; i) { // 保存之前的max避免被覆盖 int prevMax max; int prevMin min; max Math.max(nums[i], Math.max(prevMax * nums[i], prevMin * nums[i])); min Math.min(nums[i], Math.min(prevMax * nums[i], prevMin * nums[i])); result Math.max(result, max); } return result; }易错点 二刷心得为什么要同时维护最小值比如nums [-2, 3, -4]第一次计算到 3 时最小值是 - 6第二次乘以 - 4得到 24这就是最大值。空间优化技巧不需要完整的dp数组只需要用两个变量保存上一次的最大值和最小值即可空间复杂度从 O (n) 降到 O (1)。0 的处理当遇到 0 时max 和 min 都会被重置为 0后续计算会重新开始不影响结果。二、416. 分割等和子集题目回顾给你一个只包含正整数的非空数组nums。请你判断是否可以将这个数组分割成两个子集使得两个子集的元素和相等。思路复盘这是0-1 背包问题的经典变形核心是转化问题先计算数组的总和sum如果sum是奇数直接返回false无法分成两个相等的整数和问题转化为是否能从数组中选出一些数使它们的和等于sum/2目标容量核心思路0-1 背包 DP状态定义dp[j]表示是否能从数组中选出和为j的子集状态转移对于每个数num从后往前遍历背包容量j如果j num则dp[j] dp[j] || dp[j - num]不选 num 或选 num初始状态dp[0] true和为 0 的子集总是存在的即不选任何数结果dp[target]其中target sum/2Java 代码实现java运行public boolean canPartition(int[] nums) { int sum 0; for (int num : nums) { sum num; } // 总和为奇数无法分割 if (sum % 2 ! 0) return false; int target sum / 2; boolean[] dp new boolean[target 1]; dp[0] true; for (int num : nums) { // 从后往前遍历避免重复使用同一个元素 for (int j target; j num; j--) { dp[j] dp[j] || dp[j - num]; } } return dp[target]; }易错点 二刷心得奇偶性判断必须先判断总和是否为偶数否则直接返回 false这是很多人容易漏掉的边界条件。遍历顺序必须从后往前遍历背包容量否则会变成完全背包可以重复使用元素导致错误。空间优化使用一维数组代替二维数组空间复杂度从 O (n*target) 降到 O (target)是 0-1 背包的标准优化方式。三、两道题的共性总结 二刷收获动态规划的特殊状态处理乘积最大子数组因为负数的存在必须同时维护最大值和最小值避免状态丢失。分割等和子集问题转化为 0-1 背包体现了 DP 中 “问题转化” 的重要思路。优化意识空间优化从二维数组到一维数组再到变量滚动更新降低空间复杂度。边界优化提前判断奇偶性、总和为 0 等情况减少不必要的计算。面试重点乘积最大子数组重点是同时维护最大 / 最小值的逻辑以及负数对状态的影响。分割等和子集重点是问题转化为 0-1 背包以及从后往前遍历的原因。

相关文章:

二刷 LeetCode:152. 乘积最大子数组 416. 分割等和子集 复盘笔记

目录 一、152. 乘积最大子数组 题目回顾 思路复盘 核心思路:同时维护最大值和最小值 易错点 & 二刷心得 二、416. 分割等和子集 题目回顾 思路复盘 核心思路:0-1 背包 DP 易错点 & 二刷心得 三、两道题的共性总结 & 二刷收获 这两…...

二刷 LeetCode:118. 杨辉三角 198. 打家劫舍 复盘笔记

目录 一、118. 杨辉三角 题目回顾 思路复盘 代码实现(Java) 易错点 & 二刷心得 二、198. 打家劫舍 题目回顾 思路复盘 基础 DP 实现(Java) 空间优化版(O (1) 空间) 易错点 & 二刷心得 …...

《AI大模型应用开发实战从入门到精通共60篇》031、多模态大模型入门:CLIP、BLIP与LLaVA原理浅析

031、多模态大模型入门:CLIP、BLIP与LLaVA原理浅析 上周帮团队排查一个图文检索系统的线上bug,现象很诡异:用户上传一张“红色跑车在雪地”的图片,系统返回的文本描述居然是“白色轿车在沙滩”。我盯着日志看了半小时,…...

Matlab数据导出踩坑实录:writetable处理中文、日期和特殊字符的完整避坑指南

Matlab数据导出避坑实战:writetable处理多语言数据的7个关键技巧 上周在整理中日韩三语混合的传感器数据集时,我遇到了一个令人抓狂的问题——用writetable导出的CSV文件在Excel中打开全是乱码,而用记事本查看却显示正常。这个看似简单的数据…...

Windows运行安卓应用终极指南:告别模拟器的轻量级解决方案

Windows运行安卓应用终极指南:告别模拟器的轻量级解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否厌倦了在电脑上安装臃肿的安卓模拟器&…...

如何高效部署DCNv4:终极可变形卷积实践指南

如何高效部署DCNv4:终极可变形卷积实践指南 【免费下载链接】DCNv4 [CVPR 2024] Deformable Convolution v4 项目地址: https://gitcode.com/gh_mirrors/dc/DCNv4 DCNv4(Deformable Convolution v4)是OpenGVLab发布的最新可变形卷积架…...

3步实现macOS鼠标滚动顺滑如触控板的终极方案

3步实现macOS鼠标滚动顺滑如触控板的终极方案 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction independently for your mouse on ma…...

驾驭工程效率:模块化工具箱如何标准化开发运维实践

1. 项目概述:一个工程师的“瑞士军刀”工具箱最近在GitHub上看到一个挺有意思的项目,叫nnabuuu/harness-engineering-toolkit。光看名字,harness这个词就挺有味道的,它既有“利用、驾驭”的意思,也指代“线束、装备”。…...

ARMv8/v9异常处理机制与ESR_EL2寄存器解析

1. ARM异常处理机制概述异常处理是现代处理器架构的核心功能之一,它使系统能够响应硬件或软件产生的各类异常事件。在ARMv8/v9架构中,异常处理机制经过精心设计,特别是在支持虚拟化的场景下,提供了多层次的精细控制能力。当处理器…...

使用 curl 命令直接测试 Taotoken 接口连通性与模型返回效果

使用 curl 命令直接测试 Taotoken 接口连通性与模型返回效果 1. 准备工作 在开始测试之前,请确保您已具备以下条件:一个有效的 Taotoken API Key,该 Key 可在 Taotoken 控制台中创建;目标模型的 ID,可在模型广场查看…...

R 4.5新增s2_geometry()函数实测:全球10亿点集距离计算耗时从47分钟降至89秒(附基准测试完整复现代码)

更多请点击: https://intelliparadigm.com 第一章:R 4.5地理空间分析增强概览 R 4.5 版本在地理空间分析领域引入了多项底层优化与接口扩展,显著提升了 sf、terra 和 stars 等核心包的互操作性与性能表现。特别是对 PROJ 9.3 的原生支持&…...

企业如何利用 Taotoken 的审计日志功能管理内部 API 使用合规

企业如何利用 Taotoken 的审计日志功能管理内部 API 使用合规 1. 企业 API 使用合规的挑战 在企业环境中,大模型 API 的调用往往涉及多个团队和项目。缺乏有效的监控手段会导致资源分配不透明、成本难以控制,甚至可能引发未授权的模型使用行为。传统的…...

Illustrator脚本集:释放Adobe Illustrator隐藏生产力的10个实用工具

Illustrator脚本集:释放Adobe Illustrator隐藏生产力的10个实用工具 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 你是否曾经在Adobe Illustrator中重复执行繁琐操作&…...

XAPK转APK终极指南:3分钟搞定Android应用安装难题

XAPK转APK终极指南:3分钟搞定Android应用安装难题 【免费下载链接】xapk-to-apk A simple standalone python script that converts .xapk file into a normal universal .apk file 项目地址: https://gitcode.com/gh_mirrors/xa/xapk-to-apk 你是否曾经遇到…...

深入UVM数据流:从Transaction到Scoreboard的TLM通信实战解析

UVM数据流深度解析:从Transaction到Scoreboard的完整通信机制 在芯片验证领域,UVM(Universal Verification Methodology)已经成为事实上的标准验证方法学。对于已经搭建过简单UVM环境的工程师而言,理解数据如何在验证平…...

通过 Taotoken 用量看板清晰追踪各项目模型消耗与成本分摊情况

通过 Taotoken 用量看板清晰追踪各项目模型消耗与成本分摊情况 1. 用量看板的核心价值 对于同时接入多个大模型的项目团队而言,准确掌握各模型的调用量与费用分布是成本治理的基础。Taotoken 用量看板提供按项目、按模型、按时间维度的细粒度统计,帮助…...

通过Taotoken CLI工具一键配置团队开发环境与模型密钥

通过Taotoken CLI工具一键配置团队开发环境与模型密钥 1. CLI工具安装与基本使用 Taotoken提供的CLI工具可通过npm全局安装或直接使用npx运行。对于需要频繁使用CLI的团队,推荐全局安装: npm install -g taotoken/taotoken对于临时使用或项目级配置&a…...

4月30日阿里发布两款Agent产品,QoderWake邀测开启,提效显著或催生超级个体与组织

4月30日,阿里发布数字员工QoderWake和Qoder移动端两款Agent产品,覆盖企业和个人场景。QoderWake邀测已开启,能承担多岗位角色,提效明显。发布背景:现有Agent提效遇瓶颈最近数月,OpenClaw等通用Agent工具提升…...

如何快速计算3D模型体积和重量:STL-Volume-Model-Calculator终极指南

如何快速计算3D模型体积和重量:STL-Volume-Model-Calculator终极指南 【免费下载链接】STL-Volume-Model-Calculator STL Volume Model Calculator Python 项目地址: https://gitcode.com/gh_mirrors/st/STL-Volume-Model-Calculator 你是否曾经为3D打印项目…...

告别U盘和光盘!用iSCSI虚拟硬盘给服务器装Kylin V10 SP1,保姆级配置流程

基于iSCSI的银河麒麟V10 SP1无盘部署全流程解析 在数据中心和服务器机房中,传统的光盘或U盘安装方式正逐渐被更高效的网络部署方案取代。想象一下,当需要为数十台服务器批量安装操作系统时,不再需要逐个插入安装介质,而是通过简单…...

仅限前200名车载开发者获取:Dify车规版定制内核补丁包(含SPI Flash磨损均衡优化+看门狗协同重启模块)

更多请点击: https://intelliparadigm.com 第一章:Dify车载智能问答系统开发概述 Dify 是一个开源的低代码大模型应用开发平台,支持快速构建具备上下文感知、多轮对话与知识增强能力的智能问答系统。在车载场景中,其轻量级部署能…...

2026年程序员薪资被AI产品经理“碾压”?80万年薪的秘密都在这!

2026年AI产品经理成为薪资增长最快、人才缺口最大的岗位,3年经验者年薪可达80-100万元。文章分析了AI产品经理的三大核心类型(技术深耕型、垂直领域型、全生命周期型)及能力要求,揭示了薪资增长的关键因素(技术深度、业…...

全平台智能资源下载工具:res-downloader 完整使用教程

全平台智能资源下载工具:res-downloader 完整使用教程 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader res-downlo…...

从零部署OpenClaw AI助手:托管与自建方案全解析

1. 项目概述:从零到一,部署你的专属AI助手服务器如果你对AI助手的概念还停留在网页聊天框,那么OpenClaw可能会颠覆你的认知。它不是一个简单的聊天机器人,而是一个能运行在你自己的服务器上,拥有完整文件系统访问、代码…...

浏览器扩展开发实战:从DOM解析到文件下载,打造AI对话存档工具

1. 项目概述:一个被低估的“对话存档”利器如果你和我一样,经常在Phind这类AI编程助手工具上进行深度对话,那么你一定遇到过这样的痛点:花了几个小时和AI探讨一个复杂的技术方案,从架构设计到代码实现,再到…...

Xenos DLL注入器:5分钟解决Windows进程注入难题

Xenos DLL注入器:5分钟解决Windows进程注入难题 【免费下载链接】Xenos Windows dll injector 项目地址: https://gitcode.com/gh_mirrors/xe/Xenos 你是否曾经面对Windows进程注入的复杂操作感到无从下手?想象一下,你需要测试一个自定…...

手把手教你逆向分析携程旅行App的私有TCP协议(附So库解密实战)

深度解析移动应用私有TCP协议逆向工程实战 在移动互联网时代,应用开发者越来越重视数据传输的安全性,许多主流应用如携程旅行等纷纷采用私有TCP协议替代标准HTTP协议进行通信。这种变化给安全研究人员、数据工程师和技术爱好者带来了新的挑战——当传统抓…...

Sunshine游戏串流终极指南:如何用开源方案实现全平台游戏自由?

Sunshine游戏串流终极指南:如何用开源方案实现全平台游戏自由? 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一个强大的自托管游戏串流服务器&…...

第8章(2)——项目二:Claude与显示思考——引用资料

第8章(2)——项目二:Claude与显示思考——引用资料8.8 metadata显示思考的工具和资料8.8.1 metadata显示思考——使用工具8.8.2 项目二:Claude与显示思考——引用资料8.8 metadata显示思考的工具和资料 gr.Chatbot组件支持参数me…...

分享16个精美网站后台登录注册页面源码 总有几款适合你

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 在开发网站后台系统时,登录注册页面作为用户与系统交互的第一步,其设计的好坏直接影响用户体验。一个美观、易用的登录注册页面能够提升用户对系统的好感度和信任度。今天&#xf…...