【LeetCode每日一题】——152.乘积最大子数组

news2025/1/13 13:31:36

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【解题思路】
  • 七【题目提示】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 动态规划

二【题目难度】

  • 中等

三【题目编号】

  • 152.乘积最大子数组

四【题目描述】

  • 给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
  • 测试用例的答案是一个 32-位 整数。
  • 子数组 是数组的连续子序列。

五【题目示例】

  • 示例 1:

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

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

六【解题思路】

  • 本题的思路与【LeetCode每日一题】——剑指 Offer 42.连续子数组的最大和比较相似,只是本题做的是乘法,也就需要考虑到负负得正的情况
  • 所以,我们分别维护前一次状态最大值和最小值,当遇到负数时,说明有可能发生负负得正,那么就交换最大值和最小值,这里不用担心最大值变小的问题,因为无非就两种情况
    • 最小值是一个正数,这个时候最大值变为最小值,乘一个负数,不会影响之前的最大值
    • 最小值是一个负数,这个时候最大值变为负数,很明显负负得正,相乘变大,正好可以更新
  • 所以不管怎么样,都不会影响我们找到最大值
  • 维护前一次状态的最大值和最小值的动态转移方程分别为:
    • t e m p M a x = M a t h . m a x ( t e m p M a x ∗ n u m s [ i ] , n u m s [ i ] ) tempMax = Math.max(tempMax * nums[i],nums[i]) tempMax=Math.max(tempMaxnums[i],nums[i])
    • t e m p M i n = M a t h . m i n ( t e m p M i n ∗ n u m s [ i ] , n u m s [ i ] ) tempMin = Math.min(tempMin * nums[i],nums[i]) tempMin=Math.min(tempMinnums[i],nums[i])
  • 每次都要记得更新最大值
  • 最后返回结果即可

七【题目提示】

  • 1 < = n u m s . l e n g t h < = 2 ∗ 1 0 4 1 <= nums.length <= 2 * 10^4 1<=nums.length<=2104
  • − 10 < = n u m s [ i ] < = 10 -10 <= nums[i] <= 10 10<=nums[i]<=10
  • n u m s 的任何前缀或后缀的乘积都保证是一个 32 − 位整数 nums 的任何前缀或后缀的乘积都 保证 是一个 32-位 整数 nums的任何前缀或后缀的乘积都保证是一个32位整数

八【时间频度】

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n为数组大小
  • 空间复杂度: O ( 1 ) O(1) O(1)

九【代码实现】

  1. Java语言版
class Solution {
    public int maxProduct(int[] nums) {
        int res = Integer.MIN_VALUE;
        int tempMax = 1;
        int tempMin = 1;
        for(int i = 0;i<nums.length;i++){
            if(nums[i] < 0){
                int temp = tempMax;
                tempMax = tempMin;
                tempMin = temp;
            }
            tempMax = Math.max(tempMax * nums[i],nums[i]);
            tempMin = Math.min(tempMin * nums[i],nums[i]);
            res = Math.max(res,tempMax);
        }
        return res;
    }
}
  1. C语言版
int maxProduct(int* nums, int numsSize)
{
    int res = INT_MIN;
    int tempMax = 1;
    int tempMin = 1;
    for(int i = 0;i<numsSize;i++)
    {
        if(nums[i] < 0)
        {
            int temp = tempMax;
            tempMax = tempMin;
            tempMin = temp;
        }
        tempMax = fmax(tempMax * nums[i],nums[i]);
        tempMin = fmin(tempMin * nums[i],nums[i]);
        res = fmax(res,tempMax);
    }
    return res;
}
  1. Python版
class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        res = nums[0]
        tempMax = 1
        tempMin = 1
        for i in range(0,len(nums)):
            if nums[i] < 0:
                temp = tempMax
                tempMax = tempMin
                tempMin = temp
            tempMax = max(tempMax * nums[i],nums[i])
            tempMin = min(tempMin * nums[i],nums[i])
            res = max(res,tempMax)
        return res

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

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

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

相关文章

文件操作:文件的使用打开关闭与读写(顺序读写)

1.为什么使用文件 我们前面学习结构体时&#xff0c;写了通讯录的程序&#xff0c;当通讯录运行起来的时候&#xff0c;可以给通讯录中增加、删除数据&#xff0c;此时数据是存放在内存中&#xff0c;当程序退出的时候&#xff0c;通讯录中的数据自然就不存在了&#xff0c;等下…

软件测试:sql注入·依赖基本sql语句

查询语句 目的&#xff1a;回顾数据库查询条件语句&#xff08;手工sql注入操作基础知识&#xff09; 语句&#xff1a; 1. 查询所有字段&#xff1a;select * from users; 2. 查询指定字段&#xff1a; select user,password from users; 3. 条件查询&#xff1a;…

Pytorch~ONNX

pytorch转onnx其实也就是python转的 ,之前有个帖子了讲的怎么操作,这个就是在说说为什么这么做~~~ &#xff08;1&#xff09;Pytorch转ONNX的意义 一般来说转ONNX只是一个手段&#xff0c;在之后得到ONNX模型后还需要再将它做转换&#xff0c;比如转换到TensorRT上完成部署&…

韩顺平java-枚举和注解异常包装类

文章目录11章 枚举和注解11.1枚举11.2注解12章 异常12.1 异常类型12.2异常处理1&#xff09;try - catch - finally2&#xff09;throws12.3 自定义异常13章 包装类wrapper13.1包装类13.2 String——不可变字符序列13.2 StringBuffer——可变字符序列13.3 StringBuilder13.4 Ma…

【深入浅出Spring原理及实战】「开发实战系列」SpringSecurity技术实战之通过注解表达式控制方法权限

Spring Security权限控制机制 Spring Security中可以通过表达式控制方法权限&#xff0c;其中有四个支持使用表达式的注解&#xff0c;分别是PreAuthorize、PostAuthorize、PreFilter和PostFilter。其中前两者可以用来在方法调用前或者调用后进行权限检查&#xff0c;后两者可…

蓝牙不正常因为 unmet condition check

蓝牙不正常因为 unmet condition check date: 2022-12-22lastmod: 2022-12-23 现象&#xff1a;蓝牙键盘鼠标均不工作&#xff0c;图标也不显示&#xff0c;KDE系统设置显示“无已配对设备”&#xff0c;但是配对设备的按钮没有显示&#xff0c;啥按钮也没有显示 事前&#x…

使用msf生成木马反弹shell(windows系统)

一、理论总结 使用msf进行木马攻击总共分为三步即可&#xff1a; 1、生成攻击木马 2、配置监控主机 3、上传木马使得靶机中招 1.1生成攻击木马 使用msf来生成木马是一个比较方便的事情&#xff0c;使用msfvenom即可&#xff0c;框架模版为&#xff1a; msfvenom -p wind…

我国户外广告行业现状 电梯广告触达率最高 传统户外媒体刊例花费下降

户外广告特指以具体形式展示广告或告示、宣传品的载体&#xff0c;主要包含LED显示屏、LED幕墙、门头招牌、广告字、户外(室内)灯箱、大型立牌&#xff0c;甚至喷绘印刷品等生产制作环节&#xff0c;以及发布公益公告、商业广告、标识标牌、指示导向等广告内容。户外广告是面向…

Python - Order in chaos 混乱中的秩序之随机点中值连线

一.引言 刷短视频刷到了一个有趣的图形变化&#xff0c;随机给定 N 个点&#xff0c;将 N 个点首尾连接生成一个多边形&#xff0c;随后将每个边的中点连接并得到新的多边形&#xff0c;如此多次循环&#xff0c;最终总会得到一个椭圆形。 A.初始化 N 个点并生成多边形 B.取多…

Transformer实现以及Pytorch源码解读(四)-Encoder层

Transformer结构图 先放一张原论文中的图。从inputs到Poitional Encoding在前三部分中已经分析清楚&#xff0c;接下来往后分析。 Pytorch中对Transformer的调用 Pytorch将图1中左半部分的神经网络层用一个TransformerEncdoer(encoder_layer,num_layers)类进行封装&#xf…

【Kotlin 协程】Flow 异步流 ⑥ ( 调用 Flow#launchIn 函数指定流收集协程 | 通过取消流收集所在的协程取消流 )

文章目录一、调用 Flow#launchIn 函数指定流收集协程1、指定流收集协程2、Flow#launchIn 函数原型3、代码示例二、通过取消流收集所在的协程取消流一、调用 Flow#launchIn 函数指定流收集协程 1、指定流收集协程 响应式编程 , 是 基于事件驱动 的 , 在 Flow 流中会产生源源不断…

MySQL的数据类型和存储引擎介绍

一. MySQL数据类型 1. 整数类型 注&#xff1a;MySQL可以为整数类型指定宽度&#xff0c;比如 int(3)、int(5)&#xff0c;这个限制不是限制value的合法范围&#xff0c;所以对绝大数应用没有任何意义&#xff0c;对于存储而言&#xff0c;int(3) 和 int(5) 是相同的&#xff…

机器学习中的数学原理——随机梯度下降法

这个专栏主要是用来分享一下我在机器学习中的学习笔记及一些感悟&#xff0c;也希望对你的学习有帮助哦&#xff01;感兴趣的小伙伴欢迎私信或者评论区留言&#xff01;这一篇就更新一下《白话机器学习中的数学——随机梯度下降法》&#xff01; 一、什么是随机梯度下降法 随机…

NVM安装

注意事项&#xff1a; 1、不能安装任何node版本&#xff08;如存在请删除后安装nvm&#xff09;; 安装步骤&#xff1a; 1、下载nvm ![在这里插入图片描述](https://img-blog.csdnimg.cn/c9dcc27383aa41888347080438c0914e.png 解压后点击exe文件进行安装&#xff1a; &#x…

负载均衡简介

一、什么是负载均衡&#xff1f; 互联网早期&#xff0c;业务流量比较小并且业务逻辑比较简单&#xff0c;单台服务器便可以满足基本的需求&#xff1b;但随着互联网的发展&#xff0c;业务流量越来越大并且业务逻辑也越来越复杂&#xff0c;单台机器的性能问题以及单点问题凸显…

SMMP:一种基于稳定成员资格的多峰聚类算法(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

伦茨LENZE GDC操作指南

1、GDC软件综述 GDC程序可以“在线模式”和“离线模式”使用&#xff1a; 离线模式 可以在没有与目标系统&#xff08;控制器&#xff09;相连接条件下使用。该功能允许离线设定参数、编程等工作。 在线模式 通过PC的串口、并口或系统总线实现GDC与目标系统&#xff08;控制器…

376. 机器任务——最小点覆盖+匈牙利算法

有两台机器 A&#xff0c;B 以及 K 个任务。 机器 A 有 N 种不同的模式&#xff08;模式 0∼N−1&#xff09;&#xff0c;机器 B 有 M 种不同的模式&#xff08;模式 0∼M−1&#xff09;。 两台机器最开始都处于模式 0。 每个任务既可以在 A 上执行&#xff0c;也可以在 B…

艾美捷游离巯基检测试剂盒基本参数和特点说明

游离硫醇&#xff08;即蛋白质上的游离半胱氨酸、谷胱甘肽和半胱氨酸残基&#xff09;的检测和测量是研究许多生物系统中的生物过程和事件的基本任务之一。 艾美捷游离巯基检测试剂盒提供了一种简单、可重复和灵敏的工具&#xff0c;用于测定样品&#xff08;即血浆、血清、组织…

3D格式转换工具HOOPS Exchange助力3D 打印软件实现质的飞跃

HOOPS SDK是用于3D工业软件开发的工具包&#xff0c;其中包括4款工具&#xff0c;分别是用于读取和写入30多种CAD文件格式的HOOPS Exchange、专注于Web端工程图形渲染的HOOPS Communicator、用于移动端和PC端工程图形渲染的HOOPS Visualize、支持将3D数据以原生3D PDF、HTML和标…