Leetcode 152-乘积最大子数组

server/2025/2/12 4:49:45/

给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
在这里插入图片描述

题解(动态规划)

题解转载自Leetcode

这题是求数组中子区间的最大乘积,对于乘法,我们需要注意,负数乘以负数,会变成正数
所以解这题的时候我们需要维护两个变量:

  • 以i为结尾的数组乘积的最大值max[i]
  • 以i为结尾的数组乘积的最小值min[i]

(最小值可能为负数,但没准下一步乘以一个负数,当前的最大值就变成最小值,而最小值则变成最大值了)

  1. 维护一个全局变量res,通过比较res和max[i]不断更新最大值
  2. 动态方程:
    min[i]=Math.min(min[i-1]*nums[i],Math.min(max[i-1]*nums[i],nums[i]))
    max[i]=Math.max(min[i-1]*nums[i],Math.max(max[i-1]*nums[i],nums[i]))
  3. 初始化:
    max[0]=min[0]=nums[0]
  4. 返回值:res
注意:max[n-1]只是以n-1为下标的数组的最大值,而不一定是全局最大值!
class Solution {public int maxProduct(int[] nums) {int n=nums.length;int[] max=new int[n];int[] min=new int[n];int res;res=max[0]=min[0]=nums[0];for(int i=1;i<n;i++){min[i]=Math.min(min[i-1]*nums[i],Math.min(max[i-1]*nums[i],nums[i]));max[i]=Math.max(min[i-1]*nums[i],Math.max(max[i-1]*nums[i],nums[i]));res=Math.max(res,max[i]);}return res;}
}

测试用例:

本题的测试用例要包含负数,0,正数
在这里插入图片描述


http://www.ppmy.cn/server/166956.html

相关文章

使用Qt+opencv实现游戏辅助点击工具-以阴阳师为例

注&#xff1a;本文章技术交流使用&#xff0c;不侵犯任何著作权。 一. 阴阳师辅助软件需要实现哪些功能? 1.首先&#xff0c;对于肝绘卷拿角色而言&#xff0c;需要打困难28副本和结界突破循环刷绘卷碎片。这一功能让你每月免费悠闲地拿到最新角色&#xff0c;即使你是较新…

网络安全行业的冬天

冬天已经来了&#xff0c;春天还会远吗&#xff1f;2022年10月28日&#xff0c;各个安全大厂相继发布了财报&#xff0c;纵观2022年前三季度9个月&#xff0c;三六零亏了19亿&#xff0c;奇安信亏了11亿&#xff0c;深信服亏了6亿&#xff0c;天融信亏了4亿&#xff0c;安恒亏了…

Java设计模式——责任链模式与策略模式

责任链模式与策略模式的区别 文章目录 责任链模式与策略模式的区别定义与概念结构与实现应用场景总结 在软件开发中&#xff0c;设计模式是解决各种问题的有力工具。责任链模式和策略模式作为两种常见的设计模式&#xff0c;虽然都能在一定程度上提高代码的可维护性和可扩展性&…

详解SQLAlchemy的函数relationship

在 SQLAlchemy 中&#xff0c;relationship 是一个非常重要的函数&#xff0c;用于定义模型之间的关系。它用于在 ORM 层面上表示数据库表之间的关联关系&#xff08;如 1 对 1、1 对多和多对多&#xff09;。relationship 的主要作用是提供一个高级接口&#xff0c;用于在模型…

Unity-Mirror网络框架-从入门到精通之LagCompensation示例

文章目录 前言什么是滞后补偿Lag Compensation示例延迟补偿原理ServerCubeClientCubeCapture2DSnapshot3D补充LagCompensation.cs 独立算法滞后补偿器组件注意:算法最小示例前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mir…

什么是网络安全审计?网络安全审计的作用...

网络安全审计通过对网络数据的采集、分析、识别&#xff0c;实时动态监测通信内容、网络行为和网络流量&#xff0c;发现和捕获各种敏感信息、违规行为&#xff0c;实时报警响应&#xff0c;全面记录网络系统中的各种会话和事件&#xff0c;实现对网络信息的智能关联分析、评估…

spring cloud和spring boot的区别

Spring Cloud和Spring Boot在Java开发领域中都是非常重要的框架&#xff0c;但它们在目标、用途和实现方式上存在明显的区别。以下是对两者区别的详细解析&#xff1a; 1. 含义与定位 Spring Boot&#xff1a; 是一个快速开发框架&#xff0c;它简化了Spring应用的初始搭建以…

华为昇腾报:aclrtMemMallocPolicy:ACL_MEM_MALLOC_HUGE_FIRST

aclrtMemMallocPolicy 是华为昇腾&#xff08;Ascend&#xff09;AI处理器中用于设置内存分配策略的一个函数。ACL_MEM_MALLOC_HUGE_FIRST 是其中的一种内存分配策略选项。 1. aclrtMemMallocPolicy 函数 功能: 该函数用于设置内存分配策略&#xff0c;以控制内存分配时的行为…