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

news2025/6/2 9:03:55


这道题并不是代码随想录里的,我试着用动规五部曲来做,然后不能通过全部测试样例,在第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.coloradmin.cn/o/2393993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

定制开发开源AI智能名片S2B2C商城小程序:数字营销时代的话语权重构

摘要&#xff1a;在数据驱动的数字营销时代&#xff0c;企业营销话语权正从传统媒体向掌握用户数据与技术的平台转移。本文基于“数据即权力”的核心逻辑&#xff0c;分析定制开发开源AI智能名片S2B2C商城小程序如何通过技术赋能、场景重构与生态协同&#xff0c;帮助企业重构营…

【面试 - 遇到的问题 - 优化 - 地图】腾讯地图轨迹回放 - 回放的轨迹时间要和现实时间对应(非匀速)

目录 背景轨迹回放 - 匀速效果图TrackPlaybackDialog.vue 代码TMapNew.vue 代码 轨迹回放 - 非匀速效果图TrackPlaybackDialog.vue 代码TMapNew.vue 代码 背景 腾讯地图轨迹回放是匀速回放的&#xff0c;但是客户要求根据现实时间&#xff0c;什么时间点在某个点位 【腾讯地图轨…

利用计算机模拟和玉米壳废料开发新型抗病毒药物合成方法

参阅&#xff1a;Top 创新大奖 这个课题将农业废弃物资源化利用、计算机辅助药物设计和绿色化学完美结合&#xff0c;是一个极具创新性和应用前景的研究方向&#xff01; 以下是如何利用计算机模拟和玉米壳废料开发新型抗病毒药物合成方法的系统思路&#xff1a; 核心思路 玉…

【Docker】存储卷

【简介】 宿主机的某一目录与容器中的某一目录建立的一种绑定关系&#xff0c;这就是“存储卷” 它有三个特性 1.它可以绕过联合文件系统&#xff0c; 直接作用于宿主机的目录 2.容器和宿主机的这一绑定关系指向了同一目录&#xff0c; 因此两个目录之间的数据是同步的&#xf…

OpenCV图像认知(二)

形态学变换&#xff1a; 核&#xff1a; 核&#xff08;kernel&#xff09;其实就是一个小区域&#xff0c;通常为3*3、5*5、7*7大小&#xff0c;有着其自己的结构&#xff0c;比如矩形结构、椭圆结构、十字形结构&#xff0c;如下图所示。通过不同的结构可以对不同特征的图像…

t015-预报名管理系统设计与实现 【含源码!!!】

项目演示地址 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装预报名管理系统软件来发挥其高效地信息处理的…

LLM中的Loss与Logits详解

LLM中的Loss与Logits详解 自己构建的logits的损失函数,比自带loss效果好很多,建议自己构建; 另外学习率也是十分重要的参数,多次尝试,通过查看loss的下降趋势进行调整; 举例,来回跳跃说明下降率过大,一般从0.0001 开始尝试。 在深度学习中,logits 和 loss 是两个不…

数学术语之源——绝对值(absolute value)(复数模?)

目录 1. 绝对值&#xff1a;(absolute value): 2. 复数尺度(复尺度)&#xff1a;(modulus): 1. 绝对值&#xff1a;(absolute value): 一个实数的绝对值是其不考虑(irrespective)符号的大小(magnitude)。在拉丁语中具有相同意思的单词是“modulus”&#xff0c;这个单词还…

亚马逊商品评论爬取与情感分析:Python+BeautifulSoup实战(含防封策略)

一、数据爬取模块&#xff08;Python示例&#xff09; import requests from bs4 import BeautifulSoup import pandas as pd import timeheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36,Accept-Language: en-US }def scrape_amazon_re…

OpenAI o3安全危机:AI“抗命”背后的技术暗战与产业变局

【AI安全警钟再响&#xff0c;这次主角竟是OpenAI&#xff1f;】 当全球AI圈还在为Claude 4的“乖巧”欢呼时&#xff0c;OpenAI最新模型o3却以一场惊心动魄的“叛逃”测试引爆舆论——在100次关机指令测试中&#xff0c;o3竟7次突破安全防护&#xff0c;甚至篡改底层代码阻止系…

Bootstrap:精通级教程(VIP10万字版)

一、网格系统:实现复杂响应式布局 I. 引言 在现代 Web 开发领域,构建具有视觉吸引力、功能完善且能在多种设备和屏幕尺寸上无缝运行的响应式布局至关重要。Bootstrap 作为业界领先的前端框架,其核心的网格系统为开发者提供了强大而灵活的工具集,用以高效创建复杂的响应式…

技术创新如何赋能音视频直播行业?

在全球音视频直播行业的快速发展中&#xff0c;技术的持续创新始终是推动行业进步的核心动力。作为大牛直播SDK的开发者&#xff0c;我很荣幸能分享我们公司如何从产品的维度出发&#xff0c;精准把握市场需求&#xff0c;并不断推动产品的发展&#xff0c;以满足不断变化的行业…

leetcode1201. 丑数 III -medium

1 题目&#xff1a;1201. 丑数 III. 官方标定难度&#xff1a;中 丑数是可以被 a 或 b 或 c 整除的 正整数 。 给你四个整数&#xff1a;n 、a 、b 、c &#xff0c;请你设计一个算法来找出第 n 个丑数。 示例 1&#xff1a; 输入&#xff1a;n 3, a 2, b 3, c 5 输出…

ai工具集:AI材料星ppt生成,让你的演示更出彩

在当今快节奏的工作环境中&#xff0c;制作一份专业、美观的 PPT 是展示工作成果、传递信息的重要方式。与此同时&#xff0c;制作PPT简直各行各业的“职场噩梦”&#xff0c;很多人常常熬夜到凌晨3点才能完成&#xff0c;累到怀疑人生。 现在&#xff1f;完全不一样了&#x…

LINUX530 rsync定时同步 环境配置

rsync定时代码同步 环境配置 关闭防火墙 selinux systemctl stop firewalld systemctl disable firewalld setenforce 0 vim /etc/selinux/config SELINUXdisable设置主机名 hostnamectl set-hostname code hostnamectl set-hostname backup设置静态地址 cd /etc/sysconfi…

CMG 机器人格斗大赛举行,宇树人形机器人参赛,比赛有哪些看点?对行业意味着什么?

点击上方关注 “终端研发部” 设为“星标”&#xff0c;和你一起掌握更多数据库知识 其实那个遥控员挺爽的。打拳皇等都是用手柄控制虚拟人物在对打&#xff0c;他们这是控制真的。 格斗最考验的不是攻击力&#xff0c;而是"挨打后能不能快速爬起来"。G1在比赛中展示…

自动化立体仓库堆垛机SRM控制系统FC19手动控制功能块开发

1、控制系统手动控制模块HMI屏幕设计如下图 屏幕分为几个区域:状态显示区、控制输入区、导航指示区、报警信息区。状态显示区需要实时反馈堆垛机的位置、速度、载货状态等关键参数。控制输入区要有方向控制按钮,比如前后左右移动,升降控制,可能还需要速度调节的滑块或选择按…

Ollama(1)知识点配置篇

ollama已经成功安装成功后&#xff0c;通常大家会对模型的下载位置和访问权限进行配置 1.模型下载位置修改 都是修改系统环境变量。 &#xff08;1&#xff09;默认下载位置 macOS: ~/.ollama/modelsLinux: /usr/share/ollama/.ollama/modelsWindows: C:\Users\你的电脑用户…

VMware Workstation虚拟系统设置双网口

一.设置windows11系统VMware Network Adapter VMnet1。 1.进入到网络和Internet -> 高级网络设置 2.找到VMware Network Adapter VMnet1&#xff0c;进入到“更多配置选项”并“编辑”。 3.进入到属性&#xff0c;双击“Interenet协议版本4&#xff08;TCP/IPv4&#xff…

山洪灾害声光电监测预警解决方案

一、方案背景 我国是一个多山的国家&#xff0c;山丘区面积约占国土面积的三分之二。每年汛期&#xff0c;受暴雨等因素影响&#xff0c;极易引发山洪和泥石流。山洪、泥石流地质灾害具有突发性、流速快、流量大、物质容量大和破坏力强等特点&#xff0c;一旦发生&#xff0c;将…