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

LeetCode 152. 乘积最大子数组 - 动态规划解法详解

文章目录

    • 问题描述
    • 解题思路
      • 动态规划状态定义
      • 状态转移方程
    • 完整代码实现
    • 复杂度分析
    • 示例解析
    • 关键点说明
    • 总结

问题描述

给定一个整数数组 nums,请找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组对应的乘积。

示例

输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6

解题思路

乘积最大子数组问题与和最大子数组问题的关键区别在于乘积的符号特性:负数乘以负数会得到正数。这意味着:

  1. 不能只维护最大值,还需要维护最小值(因为最小负值可能遇到负数变成最大值)
  2. 状态转移需要考虑三种情况:当前元素本身、当前元素×前序最大值、当前元素×前序最小值

动态规划状态定义

  • currentMax:以当前元素结尾的连续子数组的最大乘积
  • currentMin:以当前元素结尾的连续子数组的最小乘积
  • maxProduct:全局最大乘积(最终结果)

状态转移方程

对于每个元素 nums[i]

temp = currentMax  // 保存前一个位置的最大值
currentMax = max(nums[i], temp * nums[i], currentMin * nums[i])
currentMin = min(nums[i], temp * nums[i], currentMin * nums[i])
maxProduct = max(maxProduct, currentMax)

完整代码实现

class Solution {public int maxProduct(int[] nums) {
http://www.dtcms.com/a/229812.html

相关文章:

  • 【CF】Day74——⭐Codeforces Round 885 (Div. 2) ACD (数学场)
  • 2025.6.3学习日记 Nginx 基本概念 配置 指令 文件
  • Nginx配置Ollama 访问api服务
  • 61、ESB详解
  • RTP over TCP 模式
  • Ros2 简单构建项目的流程以及涉及的文件作用
  • 【iOS安全】Macbook更换brew源
  • AI一周事件(2025年5月27日-6月2日)
  • 在图像分析算法部署中应对流行趋势的变化|文献速递-深度学习医疗AI最新文献
  • 【北邮 操作系统】第十二章 文件系统实现
  • Windows应用-音视频捕获
  • MongoTemplate常用api学习
  • 四元素、旋转矩阵与旋转向量
  • 小体积涵盖日常办公等多功能的软件
  • 第三章 3.MAC Address(CCNA)
  • linux的实时性
  • C++学者给您讲数学之——数列
  • Spring 中如何开启事务?
  • 黑马程序员TypeScript课程笔记—class篇
  • 软件工程的定义与发展历程
  • 如何避免工具过多导致的效率下降
  • Vue插槽
  • shell脚本的常用命令
  • C++ 变量一
  • Tiktok App 登录账号、密码、验证码 XOR 加密算法
  • 模拟电子技术 第一章<半导体基础>
  • Linux进程间通信(IPC)
  • Ubuntu系统 | 本地部署ollama+deepseek
  • 微软PowerBI考试 PL300-Power BI 入门
  • 自驾总结_Localization