Leetcode152. 乘积最大子数组(HOT100)

链接

代码:

class Solution {
public:int maxProduct(vector<int>& nums) {int f = nums[0],g = nums[0];int res = nums[0];for(int i = 1;i<nums.size();i++){//int i = 1 not int i = 0 ,因为我们已经初始化好了首元素作为子数组的最大值和最小值int a = nums[i],fa = f*a,fb = g*a;//更好的写法:int a = nums[i] , fa = nums[i] * f , fb = nums[i] * g ;//本质是一个滚动数组,f存储了前i-1长的子数组的最大乘积,g存储了前i-1长的子数组的最小乘积//为什么要存储最小乘积,因为nums[i]有可能小于0,那么你如果只存储前i-1长的子数组的最大乘积,结果不对,应该是最负的值和nums[i]相乘f = max(a,max(fa,fb));g = min(a,min(fa,fb));res = max(res,f);}return res;}
};

题解:对于以nums[i]作为结尾的子数组而言,它的乘积如果不看大小的话,可能依赖于以 nums[i-1]作为结尾的子数组。

为什么说可能?因为nums[i] 有可能自己作为一个子数组,比如前面乘积最大值为0,但是我nums[i]=45;显然我们可以不依赖前i-1个元素。

如果nums[i] 除了自己以外,还有其他元素,也就是说子数组大小至少为2,那么我们应该如何递推出nums[i] 作为结尾的子数组乘积?我们不仅要存储前i 个乘积的最大值,也要存储最小值,因为求解乘积和求解最大值不一样。如果nums[i] 是一个负数,那么你如果仅仅存储前i -1个乘积的最大值的话,没有什么用。

所以我们遍历时不仅要记录以前i -1 个元素为子数组的乘积的最大值,也要记录最小值,还要记录nums[i] 本身,然后在里面找出max值作为答案预选值,然后别忘了,把它们的min存起来,方便后续i+1元素使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/61827.shtml

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

相关文章

移远通信推出全新5G RedCap模组RG255AA系列,以更高性价比加速5G轻量化大规模商用

11月20&#xff0c;全球领先的物联网整体解决方案供应商移远通信宣布&#xff0c;正式推出其全新5G RedCap模组RG255AA系列。该系列模组支持5G NR独立组网&#xff08;SA&#xff09;和LTE Cat 4双模通信&#xff0c;具有高性能高集成度、低功耗、小尺寸、高性价比等优势&#…

【CVE-2024-9413】SCP-Firmware漏洞:安全通告

安全之安全(security)博客目录导读 目录 一、概述 二、修订历史 三、CVE根因分析 四、问题修复解决 一、概述 在SCP固件中发现了一个漏洞,如果利用该漏洞,可能会允许应用处理器(AP)在系统控制处理器(SCP)固件中导致缓冲区溢出。 CVE IDCVE-2024-9413受影响的产品SC…

数据集-目标检测系列- 花卉 玫瑰 检测数据集 rose >> DataBall

数据集-目标检测系列- 花卉 玫瑰 检测数据集 rose >> DataBall DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 贵在坚持&#xff01; 数据样例项目地址&#xff1a; * 相关项目 1&#xff09;数据集可视化项…

详解Qt QTimeZone 时区类

文章目录 QTimeZone 详解前言什么是 QTimeZone&#xff1f;QTimeZone 的构造函数和常用成员函数构造函数1. 默认构造函数2. 指定时区 ID 构造函数3. 根据 UTC 偏移量构造 常用成员函数1. 获取时区 IDid 2. 检查时区是否有效isValid 3. 获取 UTC 偏移量offsetFromUtc 4. 检查是否…

Linux应用编程(C语言编译过程)

目录 1. 举例 2.预处理 2.1 预处理命令 2.2 .i文件内容解读 3.编译 4.汇编 5.链接 5.1 链接方式 5.1.1 静态链接 5.1.2 动态链接 5.1.3 混合链接 1. 举例 Linux的C语言开发&#xff0c;一般选择GCC工具链进行编译&#xff0c;通过下面的例子来演示GCC如何使用&#…

GitHub 开源项目 Puter :云端互联操作系统

每天面对着各种云盘和在线应用&#xff0c;我们常常会遇到这样的困扰。 文件分散在不同平台很难统一管理&#xff0c;付费订阅的软件越来越多&#xff0c;更不用说那些烦人的存储空间限制了。 最近在 GitHub 上发现的一个开源项目 Puter 彻底改变了我的在线办公方式。 让人惊…

Python 使用 OpenCV 将 MP4 转换为 GIF图

以下是使用 Python 和 OpenCV 将 MP4 转换为 GIF 的示例代码&#xff1a; python import cv2 import imageiodef mp4_to_gif(mp4_path, gif_path, fps10, start_timeNone, end_timeNone):"""将MP4视频转换为GIF动图。:param mp4_path: 输入MP4视频的路径。:pa…

el-table的树形结构后端返回的id没有唯一键怎么办

前端自己生成唯一键 首先尝试了表格的几个字段用-拼接成唯一键 但是仍报错 只好自己利用uuid库生成&#xff1b;

【Linux】缓冲区/磁盘inode/动静态库

目录 一、缓冲区 &#xff08;一&#xff09;概念 &#xff08;二&#xff09;刷新策略 &#xff08;三&#xff09;仿写FILE &#xff08;四&#xff09;内核缓冲区 二、磁盘 &#xff08;一&#xff09;磁盘的存储 &#xff08;二&#xff09;磁盘的抽象存储结构 &am…

SpringBoot(9)-Dubbo+Zookeeper

目录 一、了解分布式系统 二、RPC 三、Dubbo 四、SpringBootDubboZookeeper 4.1 框架搭建 4.2 实现RPC 一、了解分布式系统 分布式系统&#xff1a;由一组通过网络进行通信&#xff0c;为了完成共同的任务而协调工作的计算机节点组成的系统 二、RPC RPC&#xff1a;远程…

【Github】如何使用Git将本地项目上传到Github

【Github】如何使用Git将本地项目上传到Github 写在最前面1. 注册Github账号2. 安装Git工具配置用户名和邮箱仅为当前项目配置&#xff08;可选&#xff09; 3. 创建Github仓库4. 获取仓库地址5. 本地操作&#xff08;1&#xff09;进入项目文件夹&#xff08;2&#xff09;克隆…

Spring:Spring整合Mybatis开发之纯Mybatis开发

目前我们已经对Spring有一个简单的认识了&#xff1a; Spring有一个容器&#xff0c;叫做IoC容器&#xff0c;里面保存bean。 在进行企业级开发的时候&#xff0c;其实除了将自己写的类让Spring管理之外&#xff0c;还有一部分重要的工作就是使用第三方的技术。前面已经讲了如何…

大语言模型---LoRA中损失值的计算

文章目录 概要损失计算流程小结 概要 Llama-7B模型的LoRA微调训练中&#xff0c;通过使用Cross-Entropy Loss来度量模型输出的预测分布和真实标签分布之间的距离&#xff0c;来衡量模型的准确性。 本文主要介绍LoRA中损失值的计算流程。 Cross-Entropy Loss作用&#xff1a;是…

如何选择服务器

如何选择服务器 选择服务器时应考虑以下几个关键因素&#xff1a; 性能需求。根据网站的预期流量和负载情况&#xff0c;选择合适的处理器、内存和存储容量。考虑网站是否需要处理大量动态内容或高分辨率媒体文件。 可扩展性。选择一个可以轻松扩展的服务器架构&#xff0c;以便…

MySQL原理简介—11.优化案例介绍

大纲 1.禁止或改写SQL避免自动半连接优化 2.指定索引避免按聚簇索引全表扫描大表 3.按聚簇索引扫描小表减少回表次数 4.避免产生长事务长时间执行 1.禁止或改写SQL避免自动半连接优化 (1)业务场景介绍 (2)SQL性能问题分析 (3)SQL性能调优 (1)业务场景介绍 某互联网公司…

[Golang]传递一个切片(slice)和使用变参(...)语法传递多个参数之间的区别

在 Go 中&#xff0c;传递一个切片&#xff08;slice&#xff09;和使用变参&#xff08;…&#xff09;语法传递多个参数之间有一些关键区别。让我们详细讨论这两种方式之间的区别&#xff1a; 传递切片&#xff08;Slice&#xff09; 传递方式&#xff1a; 传递切片时&…

LeetCode 第 425 场周赛 个人题解

Q1. 最小正和子数组 原题链接 Q1. 最小正和子数组 思路分析 签到题&#xff0c;暴力就行 时间复杂度&#xff1a;O(N^2) AC代码 class Solution:def minimumSumSubarray(self, nums: List[int], l: int, r: int) -> int:n len(nums)res -1acc list(accumulate(num…

R虚拟环境中安装ncdf4库包编译库问题

目录 R虚拟环境中安装ncdf4的问题 解决方案 R虚拟环境中安装ncdf4的问题 > install.packages("ncdf4")trying URL https://mirrors.bfsu.edu.cn/CRAN/src/contrib/ncdf4_1.23.tar.gzContent type application/octet-stream length 125897 bytes (122 KB)downloa…

【jvm】为什么java是半编译半解释型语言

目录 1. 编译过程2. 解释过程3. 即时编译&#xff08;JIT&#xff09;过程4. 半编译半解释型语言的特点 1. 编译过程 1.Java源代码首先会被编译成字节码&#xff08;Bytecode&#xff09;&#xff0c;这是一种与具体平台无关的中间代码。2.这一编译过程由Java编译器&#xff0…

关联子串(Java Python JS C++ C )

题目描述 给定两个字符串str1和str2,如果字符串str1中的字符,经过排列组合后的字符串中,只要有一个字符串是str2的子串,则认为str1是str2的关联子串。 若str1是str2的关联子串,请返回子串在str2的起始位置; 若不是关联子串,则返回-1。 输入描述 输入两个字符串,分…