这道题最直接的方法就是用DP来做,而且要用两个dp数组,其中f[i]表示子数组[0, i]范围内并且一定包含nums[i]数字的最大子数组乘积,g[i]表示子数组[0, i]范围内并且一定包含nums[i]数字的最小子数组乘积,初始化时f[0]和g[0]都初始化为nums[0],其余都初始化为0。那么从数组的第二个数字开始遍历,那么此时的最大值和最小值只会在这三个数字之间产生,即f[i-1]*nums[i],g[i-1]*nums[i],和nums[i]。所以我们用三者中的最大值来更新f[i],用最小值来更新g[i],然后用f[i]来更新结果res即可,由于最终的结果不一定会包括nums[n-1]这个数字,所以f[n-1]不一定是最终解,不断更新的结果res才是,参见代码如下:

class Solution {
public:int maxProduct(vector<int>& nums) {int res = nums[0], n = nums.size();vector<int> f(n, 0), g(n, 0);f[0] = nums[0];g[0] = nums[0];for (int i = 1; i < n; ++i) {f[i] = max(max(f[i - 1] * nums[i], g[i - 1] * nums[i]), nums[i]);g[i] = min(min(f[i - 1] * nums[i], g[i - 1] * nums[i]), nums[i]);res = max(res, f[i]);}return res;}
};

【Leetocde | 24 】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. 152. 乘积最大子序列

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

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

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

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

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

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

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

最新文章

  1. 证明实对称正定矩阵A的Gauss-Seidel法必定收敛(完整过程)
  2. Azure运维系列 3:善用Azure捕获功能事半功倍
  3. RPM方式安装MySQL5.6
  4. 100转换成二进制 java,一段简单的java代码,十进制转二进制
  5. 数十亿个 Wi-Fi 设备存在缺陷,通信易被窃听!
  6. 5种方式将机器学习带到Java、Python以及Go等编程语言
  7. 在vs中使用cvQueryHistValue_1D时,报错,无法识别
  8. JavaScript编程风格 (share)
  9. 「熊猫」变「长臂猿」,「乌龟」变「来复枪」,深度学习模型被攻击,破解之道有哪些?
  10. 万网域名证书如何查询下载_备案域名证书获取
  11. Modelsim搭建具有各组件的UVM验证平台
  12. android 6g 有必要吗,手机6G运存真的有必要吗?这篇实测告诉你
  13. CorelDRAWX4的VBA插件开发(三十一)使用C++制作动态连接库DLL辅助VBA构键强大功能-(5)在VBA中动态调用DLL文件
  14. 保护个人信息,才能享受大数据的时代成果
  15. eplan实战设计pdf百度云_EPLAN实战设计
  16. CTP常见问题系列之一 “CTP : 不合法的登录“
  17. sio.loadmat加载高光谱图像出错:OSError: could not read bytes
  18. m文件关联matlab,matlab关联m文件
  19. 《The One!团队》第八次作业:ALPHA冲刺(五)
  20. OpenLayers官方示例详解七之图层的最小、最大分辨率(Layer Min/Max Resolution)

热门文章

  1. 设计模式(十五):解释器模式
  2. HDUOJ---1754 I Hate It (线段树之单点更新查区间最大值)
  3. 对多个WCF服务进行统一的连接测试
  4. 计算机本地网络如何共享,本地网络共享怎么实现
  5. 输入参数的数目不足_sklearn.decomposition.PCA 参数速查手册
  6. Linux装ntfs后内存不够,Linux_安装Ubuntu后无法使用NTFS硬盘或移动硬盘,  在安装Ubuntu系统后,存在 - phpStudy...
  7. java list 循环赋值_Java List集合的坑(add方法报空指针,循环赋值时list已保存的值会改变)...
  8. php markdown的转化函数,markdown公式转为知乎格式
  9. python与材料计算公式_《从问题到程序:用Python学编程和计算》——2.11 补充材料-阿里云开发者社区...
  10. 对口高考计算机vf试题,计算机对口升学模拟答案.doc