dp算法 力扣152乘积最大子数组

news2024/11/24 16:45:22

本文是Java代码!!

152. 乘积最大子数组 - 力扣(LeetCode)

一、题目详情

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

测试用例的答案是一个 32-位 整数。

子数组 是数组的连续子序列。

示例 1:

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

输入: nums = [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
 

提示:

1 <= nums.length <= 2 * 104
-10 <= nums[i] <= 10
nums 的任何前缀或后缀的乘积都 保证 是一个 32-位 整数

二、算法讲解

题目求解的是乘积,乘积可以为正,也可以为负,为了区分这两种状态,我们创建两个表:

f[i] 表示以i-1位置为结尾时的最大乘积;

g[i] 表示以i-1位置为结尾时的最小乘积。

针对nums[i] ,有大于0、小于0、等于0三种状态,故对于f表和g表的讨论也要带入nums[i]的不同状态,即:

 故,可以使用虚拟空间,忽略对于 i - 1 边界的考虑,得到:

 对于虚拟出来的f表和g表的第一个格子空间,为了不干扰后续的结果,初始化为

f[0]=g[0]=1;

返回值则是f表中最大的那一个。

三、代码

class Solution {
    public int maxProduct(int[] nums) {
        int n = nums.length;
        int[] f = new int[n+1];
        int[] g = new int[n+1];
        f[0] = 1;
        g[0] = 1;
        int max = Integer.MIN_VALUE;
        for(int i=1;i<=n;i++){
            f[i] = Math.max(nums[i-1],Math.max(f[i-1]*nums[i-1],g[i-1]*nums[i-1]));
            g[i] = Math.min(nums[i-1],Math.min(g[i-1]*nums[i-1],f[i-1]*nums[i-1]));
            max = Math.max(max,f[i]);
        }
        return max;
    }
}

运行截图:

 

结语

这篇博客如果对你有帮助,给博主一个免费的点赞以示鼓励,欢迎各位🔎点赞👍评论收藏⭐,谢谢!!!

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

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

相关文章

【C++】STL栈和队列基本功能介绍、题目练习和模拟实现(容器适配器)

stack && queue 基本功能介绍、练习和模拟实现 前言正式开始基本函数功能三道经典栈题目讲解最小栈栈的弹出压入顺序逆波兰表达式求值 模拟实现stackqueue deque 前言 本篇基本功能不会介绍太多&#xff0c;主要是说一下STL库中的接口&#xff0c;还是在这个网站上的&…

【动态内存错误详解和C的内存分区】

常见的动态内存错误 1.动态内存错误2.经典案例分析2.1案例一2.1.1**问题分析**2.1.2**修改错误** 2.2案例二2.2.1 原因分析2.2.2 解决问题 c/c内存分布1.2 内存分区简介1.2.1 栈区(stack)1.2.2 堆区(heap)1.2.3 全局(静态)区1.2.4 常量区1.2.5 代码区 1.动态内存错误 &#xf…

DETR (DEtection TRansformer)基于自建数据集开发构建目标检测模型超详细教程

目标检测系列的算法模型可以说是五花八门&#xff0c;不同的系列有不同的理论依据&#xff0c;DETR的亮点在于它是完全端到端的第一个目标检测模型&#xff0c;DETR&#xff08;Detection Transformer&#xff09;是一种基于Transformer的目标检测模型&#xff0c;由Facebook A…

幼儿园门禁安全升级,其实是这么做的!

幼儿园门禁安全是确保幼儿园校园安全的重要方面。为了有效管理出入人员和防止未经授权者进入&#xff0c;幼儿园门禁系统起到了至关重要的作用。 人脸识别门禁系统作为一种先进的技术方案&#xff0c;通过准确识别个体的面部特征&#xff0c;提供了更高的安全性和便捷性。 客户…

HeidiSQL使用

​ 1、点击新建后&#xff0c;选择在根分类创建会话 2、左侧在会话名称下出现的Unnamed&#xff0c;右键选择Rename即可重命名。右侧选择数据库类型&#xff08;mysql&#xff09;&#xff0c;输入主机名&#xff08;默认本机127.0.0.1&#xff09;&#xff0c;用户名&#xff…

webpack打包之 copy-webpack-plugin

copy-webpack-plugin 打包复制文件插件。 1、什么时候要使用&#xff1f; 在离线应用中&#xff0c;前端所有文件都需在在本地&#xff0c;有些文件&#xff08;比如iconFont以及一些静态img)需要转为离线文件&#xff0c;这些文件可以直接引用更方便些&#xff0c;这就需要在打…

0基础小白自学Java“基础语法合集”,新手看这一篇就够了!!

零基础开始学习Java&#xff0c;我们应该如何入手呢&#xff1f;本文将分享以下的6点以帮助朋友们更好的学习。 1、Java注释&#xff1a; 注释是什么&#xff0c;我们为什么要学习注释&#xff1f;注释的分类?注释使用的注意事项? 注释前后对比 注释概念&#xff1a; 注释…

Python基础合集 练习28 (数值运算函数)

from this import d x -120 x的绝对值 x1 abs(x) 同时输出商和余数 y 7 y1 divmod(x1, y) print(y1) /进行幂余运算 z可以省略 (x**y)%z pow(x,y[,z]) pow(3, pow(3, 99), 10000) 四舍五入函数 d是保留小数位数&#xff0c;默认为0 round(x,[,d]) print(round…

什么是JSON

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <script>//编写一个JavaScript对象var obj{name:"蒋铭基",id:3,age:19}//将对象转化…

bclinux执行df命令无反应解决方法、bclinux执行df命令卡死解决方法、进程追踪strace命令说明

文章目录 说明解决方法首先排除不是系统问题验证挂载信息追踪df进程strace命令安装strace命令定位df命令卡在哪解决卡住的进程问题解决&#xff0c;验证 说明 额 今天收到反馈&#xff0c;虚拟机执行df命令卡住 卡住状态如下图 解决方法 首先排除不是系统问题 很简单&…

Ceph分布式文件系统——文件系统MDS接口 块存储RDB接口 对象存储RGW接口

创建 CephFS 文件系统 MDS 接口 服务端操作 1&#xff09;在管理节点创建 mds 服务 cd /etc/ceph ceph-deploy mds create node01 node02 node03 2&#xff09;查看各个节点的 mds 服务 ssh rootnode01 systemctl status ceph-mdsnode01 ssh rootnode02 systemctl status ceph…

ERROR 4: Unable to open EPSG support file gcs.csv.

报错&#xff1a; ERROR 4: Unable to open EPSG support file gcs.csv. Try setting the GDAL_DATA environment variable to point to the directory containing EPSG csv files. 解决办法&#xff1a; 将gdal编译文件的data目录设置为用户变量&#xff0c;再运行&#xff…

设计一个web服务器

完整资料进入【数字空间】查看——baidu搜索"writebug" ​ 课程设计目的 《Java&.net》是一门实践性较强的软件基础课程&#xff0c;为了学好这门课程&#xff0c;必须在掌握理论知识的同时&#xff0c;加强上机实践。本课程设计的目的就是要达到理论与实际应用…

前端实现:点击硬币实现硬币翻转动画,且动画停止时正反面随机

html: <div class"pic-box" ref"animationBox"><div class"boxes" click"handleTransform"><div class"box">// 硬币正面图片<img :class"coin1 ? img-pic : img-text" :src"coinPic&…

智能载波远程集抄系统

智能载波远程集抄系统是一种基于物联网技术的先进能源管理系统&#xff0c;它通过利用电力载波通信技术&#xff0c;实现对用户用电数据的远程抄表和监控。该系统不仅可以提高能源管理的效率和精度&#xff0c;同时还可以减少能源浪费和节省成本。 智能载波远程集抄系统主要由三…

Ceph 应用

Ceph 应用 一、创建 CephFS 文件系统 MDS 接口 1.服务端操作 1&#xff09;在管理节点创建 mds 服务 cd /etc/ceph ceph-deploy mds create node01 node02 node032&#xff09;查看各个节点的 mds 服务 ssh rootnode01 systemctl status ceph-mdsnode01 ssh rootnode02 syst…

不满足于RPC,详解Dubbo的服务调用链路

系列文章目录 【收藏向】从用法到源码&#xff0c;一篇文章让你精通Dubbo的SPI机制 面试Dubbo &#xff0c;却问我和Springcloud有什么区别&#xff1f; 超简单&#xff0c;手把手教你搭建Dubbo工程&#xff08;内附源码&#xff09; Dubbo最核心功能——服务暴露的配置、使用…

学习opencv.js(一)

opencv.js是什么 OpenCV.js 是 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;的 JavaScript 版本。OpenCV 是一个广泛使用的计算机视觉和图像处理库&#xff0c;提供了一系列功能强大的算法和工具&#xff0c;用于处理图像、视频、特征提取、对象识别等…

LAXCUS:面向AI的数据计算平台

随着人工智能技术的快速发展&#xff0c;数据计算需求呈现出爆炸式增长。为了满足这一需求&#xff0c;越来越多的企业和研究机构开始寻求更加高效、灵活和可扩展的分布式操作系统。在这个背景下&#xff0c;LAXCUS分布式操作系统应运而生&#xff0c;它是一个面向人工智能的数…

这些会议录音转文字教程还不赶紧学起来?

小芳&#xff1a;嘿&#xff0c;你知道有一些软件可以帮助我们将会议记录中的音频转换成文字吗&#xff1f; 小乐&#xff1a;当然&#xff01;有几种方法可以做到。我们可以直接使用一些音频转文字工具实现。 小芳&#xff1a;那有没有特别推荐的工具&#xff1f; 小乐&…