当前位置: 首页 > 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) {

相关文章:

  • 【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篇
  • 软件工程的定义与发展历程
  • 白云网站建设价格/网络营销文案策划
  • 通辽网站开发/软文推送
  • 风水网站开发/中国站长站
  • 中国贸易服务网/seo网络优化公司
  • 十大不充钱的手游/福州seo代理商
  • 微信服务号可以做万网站么/深圳seo公司助力网络营销飞跃