当前位置: 首页 > news >正文

LeetCode热题100—— 152. 乘积最大子数组

https://leetcode.cn/problems/maximum-product-subarray/description/?envType=study-plan-v2&envId=top-100-liked

给你一个整数数组 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-位 整数

题解

index01234
56-34-3
  1. 初始值 maxAns = minAns = nums[0] = 5
  2. 第一轮 i=1 直接从第二个元素开始遍历即可
    1. maxAns = max(maxAns * nums[1],nums[1],minAns * nums[1]) = max(30,6,30) = 30
    2. minAns = min(maxAns * nums[1],nums[1],minAns * nums[1]) = min(30,6,30) = 6
  3. 第二轮 i=2
    1. maxAns = max(maxAns * nums[2],nums[2],minAns * nums[2]) = max(-90,-3,-18) = -3
    2. minAns = min(maxAns *nums[2],nums[2],minAns * nums[2]) = min(-90,-3,-18) = -90
  4. 第三轮 i=3
    1. maxAns = max(maxAns * nums[3],nums[3],minAns * nums[3]) = max(-12,4 , -360) = 4
    2. minAns = min(maxAns * nums[3],nums[3],minAns * nums[3]) = min(-12,4 , -360) = -360
  5. 第四轮 i=4
    1. maxAns = max(maxAns * nums[4],nums[4],minAns * nums[4]) = max(-12,-3 , 1080) = 1080
    2. minAns = min(maxAns * nums[4],nums[4],minAns * nums[4]) = min(-12,-3 , 1080) = -12

核心思想:
负负得正,正正得正
负的越多,正的越大 (-100 * -1 > -50 * -1)

public int maxProduct(int[] nums) {int maxAns = nums[0],minAns = nums[0];int ans = maxAns;for(int i=1;i<nums.length;i++){int max = maxAns,min = minAns;maxAns = Math.max(max*nums[i],Math.max(nums[i],min*nums[i]));minAns = Math.min(max*nums[i],Math.min(nums[i],min*nums[i]));ans = Math.max(ans,maxAns);}return ans;}
http://www.xdnf.cn/news/1094725.html

相关文章:

  • 7.神经网络基础
  • SpringBoot集成文件 - 大文件的上传(异步,分片,断点续传和秒传)
  • huggingface 笔记: Trainer
  • Airtest 的 Poco 框架中,offspring()
  • 使用Python求解最优化问题:从理论到实践的全方位指南
  • 2025年上半年软件设计师考后分享
  • LLM中 最后一个词语的表征(隐藏状态)通常会融合前面所有词语的信息吗?
  • 跨服务sqlplus连接oracle数据库
  • Flink-1.19.0源码详解6-JobGraph生成-后篇
  • 【Java】【字节面试】字符串中 出现次数最多的字符和 对应次数
  • pytorch chunk 切块
  • 两种方式清除已经保存的git账号密码
  • 11.7 ChatGPT奖励模型完全解读:RLHF核心技术深度剖析与Hugging Face实战
  • MyBatisPlus-03-扩展功能
  • 学习日记-spring-day44-7.9
  • 前端进阶之路-从传统前端到VUE-JS(第四期-VUE-JS页面布局与动态内容实现)(Element Plus方式)
  • 2025快手创作者中心发布视频python实现
  • 基于docker进行渗透测试环境的快速搭建(在ubantu中docker设置代理)
  • 单细胞入门(2)-经典案例分析
  • 分治算法---快排
  • 【TCP/IP】2. 计算机网络与因特网体系结构
  • Linux驱动04 --- 网络编程TCP客户端
  • 【AI News | 20250708】每日AI进展
  • mysql 故障检测与处理
  • 【牛客刷题】游游的字母串
  • RIP实验
  • 练习:对象数组 5
  • DolphinScheduler 3.2.0 Worker启动核心源码解析
  • C/C++ 高频八股文面试题1000题(二)
  • EPLAN 电气制图(六):结构盒与设备管理器核心概念(基础知识选看)