乘积最大子序列

给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。

示例 1:

输入: [2,3,-2,4]

输出: 6

解释: 子数组 [2,3] 有最大乘积 6。

示例 2:

输入: [-2,0,-1]

输出: 0

解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。

解题思路:乘法与加法最大差别在于,当前元素的符号具有全局性的作用。

如果当前元素为负,那么连乘到上个元素的最大乘积,再乘以当前元素,就变成负数,甚至可能成为最小乘积。

同样,连乘到上个元素的最小乘积如为负,再乘以当前元素,就变成正数,甚至可能成为最大乘积。

因此使用动态规划的方法:

记maxLast/minLast为连乘到上个元素的最大/小乘积

记maxCur/minCur为连乘到当前元素的最大/小乘积

记maxAll为全局最大乘积

 1 class Solution{
 2 public:
 3     int maxProduct(vector<int>& nums){
 4         if (nums.empty()){
 5             return 0;
 6         }
 7         if (nums.size() == 1){
 8             return nums[0];
 9         }
10         int maxAll = nums[0];//global maximum
11         int maxLast = nums[0];//maximum including last element
12         int maxCur;//maximum including current element
13         int minLast = nums[0];//minumum including current element
14         int minCur;//minimum including last element
15         for (int i = 1; i<nums.size(); i++){
16             maxCur = max(nums[i], max(maxLast*nums[i], minLast*nums[i]));
17             minCur = min(nums[i], min(maxLast*nums[i], minLast*nums[i]));
18             maxLast = maxCur;
19             minLast = minCur;
20             maxAll = max(maxAll, maxCur);
21         }
22         return maxAll;
23     }
24 };

转载于:https://www.cnblogs.com/kexinxin/p/10196010.html

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

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

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

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

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

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

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

  4. leetcode 152 乘积最大子序列

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

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

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

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

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

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

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

  8. 动态规划——乘积最大子数组(Leetcode 152)

    题目选自Leetcode 152. 乘积最大子数组 题目描述: 解题思路: 解题代码: class Solution { public:int maxProduct(vector<int> ...

  9. 刻意练习:LeetCode实战 -- Task26.判断子序列

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

最新文章

  1. 调侃 -- 刚入职时的单纯
  2. R语言R原生及可视化包ggplot2绘制并排的箱图实战(Side-by-Side Boxplots)
  3. 明明白白学C#第0章准备工作
  4. 随机森林算法的随机性_理解随机森林算法的图形指南
  5. spring mvc学习(7):springmvc学习笔记(常用注解)
  6. 2021年中国在线旅游直播专题分析
  7. linux关于权限的案例,16. Linux权限管理案例1 - 警察与土匪
  8. ApacheCN 2019.4~7 总结
  9. MySQL 入门(十一)—— 运算符
  10. Web安全攻防:渗透测试实战指南
  11. 局域网传输文件_如何“互传文件”?简单几步,方便快捷
  12. 最简单的python爬虫案例,适合入门学习
  13. 【qcom msm8953 android712】rtc 调试分析续
  14. 作为一只爬虫,如何科学有效地处理短信验证码?
  15. 1.21 同级比较 倒装句 否定Neither
  16. 张朝阳陈天桥牵手周鸿祎 马化腾仗势欺人孤独求败
  17. 用SQL分析北京周边城市:天津以及保定房价
  18. 机器学习实战(入门级) ------ Kaggle 泰坦尼克号幸存者预测 (随机森林,KNN,SVM)
  19. html自定义指针,如何自定义鼠标指针 怎样在wpf中自定义鼠标指针
  20. 使用fastdb的感受

热门文章

  1. MacBook 推出移动硬盘时总是提示有程序在使用它,如何解决?
  2. nginx fastcgi python_Nginx + webpy 和FastCGI搭建webpy环境
  3. mysql 上一篇_mysql取上一篇和下一篇的查询
  4. 添加几个手机联系人_One UI 3.0: 更细腻、更好用,这才是手机系统该有的样子
  5. 小程序triggerevent 传参_微信小程序——无限递归的层次列表
  6. 【音视频安卓开发 (四)】AndroidStudio项目配置权限、jni库路径、ABI
  7. 土木计算机2级,请教各位,我是学土木的,考计算机二级的哪个比较好?
  8. oracle定时关闭job,Oracle 定时JOB
  9. C什么k什么_K线图基础知识丨什么是K线散兵坑形态?K线散兵坑形态的操作与案例详解...
  10. 飞畅科技-工业以太网交换机的差异性