链接:https://leetcode-cn.com/problems/maximum-product-subarray/

题解:https://leetcode-cn.com/problems/maximum-product-subarray/solution/dong-tai-gui-hua-li-jie-wu-hou-xiao-xing-by-liweiw/

nums[i] 的正负和之前的状态值(正负)就产生了联系,由此关系写出状态转移方程:

当 nums[i] > 0 时,由于是乘积关系:最大值乘以正数依然是最大值;最小值乘以同一个正数依然是最小值;
当 nums[i] < 0 时,依然是由于乘积关系:最大值乘以负数变成了最小值;最小值乘以同一个负数变成最大值;
当 nums[i] = 0 的时候,由于 nums[i] 必须被选取,最大值和最小值都变成 0 ,合并到上面任意一种情况均成立。

class Solution {
public:int maxProduct(vector<int>& nums) {int size = nums.size();int res = INT_MIN, imax = 1, imin = 1;        for (int i = 0; i < size; ++i) {if (nums[i] < 0) swap(imax, imin);imax = max(imax * nums[i], nums[i]);imin = min(imin * nums[i], nums[i]);res = max(res, imax);}return res;}
};

时间复杂度:O(n)

imax表示以当前节点为终结节点的最大连续子序列乘积

imin表示以当前节点为终结节点的最小连续子序列乘积

152. 乘积最大子序列相关推荐

  1. leetcode - 53. 最大子序和 152. 乘积最大子序列 - 两个算法之间的联系和区别

    这两道算法题的解题思路是差不多的,但是从整体上分析,乘积最大子序列之和是最大子序和的进阶.先来看看两道算法题的简单描述. 53.最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组 ...

  2. Java实现 LeetCode 152 乘积最大子序列

    152. 乘积最大子序列 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] ...

  3. Leetcode 152. 乘积最大子序列 解题思路及C++实现

    解题思路: 求乘积最大的子序列,不同于和最大的子序列,两个负数相乘是会得到正数的,所以在遍历数组nums时,需要存储最大和最小的子序列乘积.然后每遍历一个元素,更新一次. class Solution ...

  4. leetcode 152 乘积最大子序列

    给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6. 示例 2 ...

  5. LeetCode 152. 乘积最大子序列(DP)

    文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1:输入: [2,3,-2,4] 输出: 6 解 ...

  6. LeetCode 152. 乘积最大子序列(动态规划)

    题目描述 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6. ...

  7. 【Leetocde | 24 】152. 乘积最大子序列

    这道题最直接的方法就是用DP来做,而且要用两个dp数组,其中f[i]表示子数组[0, i]范围内并且一定包含nums[i]数字的最大子数组乘积,g[i]表示子数组[0, i]范围内并且一定包含nums ...

  8. leetcode 算法-乘积最大子序列-152

    leetcode 算法-乘积最大子序列 leetcode 传送门 题目 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2, ...

  9. Leetcode 152.乘机最大子序列

    乘积最大子序列 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 ...

最新文章

  1. wfs.js windows用法
  2. 软件测试技术lab2——Selenium上机实验
  3. .NET Core 3.0 Preview 9 发布
  4. 【机器视觉】 write_measure算子
  5. 顺序表查找+折半查找(二级)
  6. 倒立摆自动起摆_今天起,中山街坊可以去唱K、游泳、看电影、摆喜酒了!
  7. request mysql 接口_TP5接口开发
  8. HTML+CSS+JS实现 ❤️感谢关注3D文字动画特效❤️
  9. 用Grafana为Elasticsearch做日志分析
  10. 表单提交数据丢失的问题
  11. 离婚算法:说不清的感情对错,但算得清的财产分割
  12. linux命令(一)查看进程的线程数top,ps
  13. 如何让隐藏在大数据背后的价值发挥出来?
  14. linux openssh 升级最新版本
  15. RPM是RedHat Package Manager(RedHat软件包管理工具)
  16. 围观Razavi和Sansen打架——电流并联反馈
  17. 第二次团队作业 -- 预则立他山之石
  18. 帝国CMS采集-只需输入关键词的帝国CMS采集插件
  19. Pina Colada Song现实版
  20. 如何用数据分析的概念制作简单Excel报表?

热门文章

  1. golang | 空结构体struct{}的用法
  2. ReactWebpack 环境安装
  3. 《精通软件性能测试与LoadRunner最佳实战》—第1章1.1节软件测试基础
  4. javascript变量作用域一点总结
  5. [Android Pro] app_process command in Android
  6. Android Studio调试功能使用总结【转】
  7. IO File.copy 实现文件的复制
  8. 一个貌似win窗口的载入框
  9. Golang map 三板斧第二式:注意事项
  10. 树堆(Treap)图文详解与实现