力扣HOT100之动态规划:152. 乘积最大子数组

article/2025/6/22 17:52:45


这道题并不是代码随想录里的,我试着用动规五部曲来做,然后不能通过全部测试样例,在第109个测试样例卡住了,如下所示。

原因是可能负数乘以负数会得到最大的乘积,不能单纯地用上一个序列的最大值乘以当前值来判断是否能得到更大值。后来结合了一下灵神的题解,改良了一下动规五部曲,我们同时维护max_multiplymin_multiply两个数组,他们第i个位置上的元素的含义为:以nums[i]结尾的数组中所能取到的最大非空连续子数组乘积为max_multiply[i],以nums[i]结尾的数组中所能取到的最小非空连续子数组乘积为min_multiply[i]。而dp[i]的含义为:以nums[i]为结尾的情况下,所能取到的非空连续子数组的最大乘积。我们可以得到如下4种情况:

  1. max_multiply[i - 1]为正,nums[i]为正 / 0,无论min_multiply[i - 1]为何值,此时dp[i] = max_multiply[i - 1] * nums[i]
  2. max_multiply[i - 1]为负,nums[i]为正 / 0,min_multiply[i - 1]只能为负,此时dp[i] = nums[i]
  3. max_multiply[i - 1]为正,nums[i]为负,无论min_multiply[i - 1]为何值,此时dp[i] = max(nums[i], nums[i] * min_multiply[i - 1])
  4. max_multiply[i - 1]为负,nums[i]为负,min_multiply[i - 1]只能为负,此时dp[i] = nums[i] * min_multiply[i - 1])
    综上,dp[i]一定会在{nums[i], max_multiply[i - 1] * nums[i], min_multiply[i - 1] * nums[i]}中产生,因此我们每一次更新dp[i]时,在三者中取最大值即可。下面给出动规五部曲:
    1.确定dp[i]的含义:以nums[i]为结尾的情况下,所能取到的非空连续子数组的最大乘积
    2.确定递推公式 dp[i] = max_multiply[i];
    3.dp数组初始化 dp[0] = nums[0]
    4.确定遍历顺序:从左往右遍历
    5.打印数组(省略)
    同样,最大乘积不一定是以最后一个元素结尾构成的连续子数组产生的,我们同样用一个变量result来维护最大乘积。
class Solution {
public:int maxProduct(vector<int>& nums) {//1.确定dp[i]的含义:以nums[i]为结尾的情况下,所能取到的非空连续子数组的最大乘积//2.确定递推公式  dp[i] = max(nums[i], nums[i] * dp[i - 1]);//3.dp数组初始化 dp[0] = nums[0]  //4.确定遍历顺序:从左往右遍历//5.打印数组(省略)int n = nums.size();vector<int> dp(n);vector<int> max_multiply(n);vector<int> min_multiply(n);//初始化dp[0] = nums[0];max_multiply[0] = nums[0];min_multiply[0] = nums[0];int result = nums[0];for(int i = 1; i < n; i++){// for(int j = 0; j < i; j++){max_multiply[i] = max({nums[i], nums[i] * max_multiply[i - 1], nums[i] * min_multiply[i - 1]});min_multiply[i] = min({nums[i], nums[i] * max_multiply[i - 1], nums[i] * min_multiply[i - 1]});dp[i] = max_multiply[i];result = max(result, dp[i]);}return result;}
};

http://www.hkcw.cn/article/XwFtiYECwC.shtml

相关文章

应急响应靶机-web2-知攻善防实验室

题目&#xff1a; 前景需要&#xff1a;小李在某单位驻场值守&#xff0c;深夜12点&#xff0c;甲方已经回家了&#xff0c;小李刚偷偷摸鱼后&#xff0c;发现安全设备有告警&#xff0c;于是立刻停掉了机器开始排查。 这是他的服务器系统&#xff0c;请你找出以下内容&#…

【设计模式-4.6】行为型——状态模式

说明&#xff1a;本文介绍行为型设计模式之一的状态模式 定义 状态模式&#xff08;State Pattern&#xff09;也叫作状态机模式&#xff08;State Machine Pattern&#xff09;&#xff0c;允许对象在内部状态发生改变时改变它的行为&#xff0c;对象看起来好像修改了它的类…

proteus新建工程

1 点击新建工程 2 输入项目名&#xff0c;选择工程文件夹 3 下一步 4 不创建pcb 5 直接下一步 6 点击完成 7 创建完毕

【计算机CPU架构】ARM架构简介

引言&#xff1a;后x86时代的计算革命 2023年全球ARM芯片出货量突破300亿片&#xff0c;这个数字背后是智能手机、物联网设备、数据中心到超级计算机的全面渗透。当Apple M系列芯片以颠覆性效能震撼PC市场&#xff0c;当AWS Graviton3以40%性价比优势冲击云服务&#xff0c;一场…

Python实现P-PSO优化算法优化循环神经网络LSTM分类模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 随着深度学习技术的迅猛发展&#xff0c;循环神经网络&#xff08;RNN&#xff09;及其变体LSTM&#xff08;Long S…

牛客周赛94

随手写一下题解吧&#xff0c;最后一题确实有点烧脑了&#xff0c;一开始没想到&#xff0c;看完题解确实茅塞顿开了 经典校招题 思路&#xff1a;n级台阶&#xff0c;每次只能走1或2格&#xff0c;问你最少得步数&#xff0c;那肯定就是每次都走两个&#xff0c;如果是奇数就…

华为OD机试真题——硬件产品销售方案(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《硬件产品销售方案》: 目录…

流媒体基础解析:视频清晰度的关键因素

在视频处理的过程中&#xff0c;编码解码及码率是影响视频清晰度的关键因素。今天&#xff0c;我们将深入探讨这些概念&#xff0c;并解析它们如何共同作用于视频质量。 编码解码概述 编码&#xff0c;简单来说&#xff0c;就是压缩。视频编码的目的是将原始视频数据压缩成较…

TDengine 集群运行监控

简介 为了确保集群稳定运行&#xff0c;TDengine 集成了多种监控指标收集机制&#xff0c;并通过 taosKeeper 进行汇总。taosKeeper 负责接收这些数据&#xff0c;并将其写入一个独立的 TDengine 实例中&#xff0c;该实例可以与被监控的 TDengine 集群保持独立。TDengine 中的…

SoftThinking:让模型学会模糊思考,同时提升准确性和推理速度!!

摘要&#xff1a;人类的认知通常涉及通过抽象、灵活的概念进行思考&#xff0c;而不是严格依赖离散的语言符号。然而&#xff0c;当前的推理模型受到人类语言边界的限制&#xff0c;只能处理代表语义空间中固定点的离散符号嵌入。这种离散性限制了推理模型的表达能力和上限潜力…

【LUT技术专题】图像自适应3DLUT

3DLUT开山之作: Learning Image-adaptive 3D Lookup Tables for High Performance Photo Enhancement in Real-time&#xff08;2020 TPAMI &#xff09; 专题介绍一、研究背景二、图像自适应3DLUT方法2.1 前置知识2.2 整体流程2.3 损失函数的设计 三、实验结果四、局限五、总结…

【计算机网络】 ARP协议和DNS协议

文章目录 【计算机网络】ARP协议和DNS协议&#xff08;知识点详细&#xff09;一、ARP协议&#xff08;地址解析协议&#xff09;1. **协议功能**2. **ARP报文结构**3. **工作流程**&#xff08;1&#xff09;**正向ARP&#xff08;已知IP&#xff0c;求MAC&#xff09;**&…

普中STM32F103ZET6开发攻略(一)

各位看官老爷们&#xff0c;点击关注不迷路哟。你的点赞、收藏&#xff0c;一键三连&#xff0c;是我持续更新的动力哟&#xff01;&#xff01;&#xff01; 目录 普中STM32F103ZET6开发攻略 1. GPIO端口实验——点亮LED灯 1.1 实验目的 1.2 实验原理 1.3 实验环境和器材…

Azure DevOps 管道部署系列之二IIS

本博客旨在提供如何使用 Azure DevOps YAML 管道部署到虚拟机上的 IIS 的实用指南。 开始之前,您需要做好以下准备: 您拥有要部署的服务器的访问权限以及 PowerShell 的管理员访问权限。您拥有要部署的远程服务器的互联网访问权限。您拥有在服务器上安装 .NET Core 托管包的…

Linux命令之ausearch命令

一、命令简介 ausearch 是 Linux 审计系统 (auditd) 中的一个实用工具,用于搜索审计日志中的事件。它是审计框架的重要组成部分,可以帮助系统管理员分析系统活动和安全事件。 二、使用示例 1、安装ausearch命令 Ubuntu系统安装ausearch命令,安装后启动服务。 root@testser…

2025山东CCPC题解

文章目录 L - StellaD - Distributed SystemI - Square PuzzleE - Greatest Common DivisorG - Assembly Line L - Stella 题目来源&#xff1a;L - Stella 解题思路 签到题&#xff0c;因为给出的字母不是按顺序&#xff0c;可以存起来赋其值&#xff0c;然后在比较。 代码…

复数三角不等式简介及 MATLAB 演示

复数三角不等式简介及 MATLAB 演示 1. 复数三角不等式简介 复数三角不等式&#xff08;Complex Triangle Inequality&#xff09;是复数的一种重要性质&#xff0c;它类似于普通的三角不等式&#xff0c;但适用于复数空间。具体来说&#xff0c;复数三角不等式可以描述复数之…

学术合作交流

想找志同道合的科研小伙伴&#xff01;研究方向包括&#xff1a;计算机视觉&#xff08;CV&#xff09;、人工智能&#xff08;AI&#xff09;、目标检测、行人重识别、行人搜索、虹膜识别等。欢迎具备扎实基础的本科、硕士及博士生加入&#xff0c;共同致力于高质量 SCI 期刊和…

2025-05-31 Python深度学习10——模型训练流程

文章目录 1 数据准备1.1 下载与预处理1.2 数据加载 2 模型构建2.1 自定义 CNN 模型2.2 GPU加速 3 训练配置3.1 损失函数3.2 优化器3.3 训练参数 4 训练循环4.1 训练模式 (model.train())4.2 评估模式 (model.eval()) 5 模型验证 本文环境&#xff1a; Pycharm 2025.1Python 3.1…

十五、STM32的TIM(六)(PWM驱动舵机)

介绍&#xff1a;本章节主要讲解如何在 STM32C8T6 上使用 PWM 驱动舵机。通过按键输入控制&#xff0c;输出以 PWM 信号调整舵机转动角度&#xff0c;从而实现对舵机的精准控制。 目录 一、接线图 二、相关参数的计算 三、相关代码的编写 四、程序现象 一、接线图 二、相关…