第十五周LeetCode
来源:互联网 发布:js中eval函数的用法 编辑:程序博客网 时间:2024/05/28 15:52
题目
Maximum Product Subarray
难度 Medium
Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array [2,3,-2,4],
the contiguous subarray [2,3] has the largest product = 6.
实现思路
这个题跟Maximum Subarray很相似,但是因为乘积时负数乘负数得到整数,可能在乘上一个负数时得到最大值,因此不能只用一个数组做动态规划,需要分成最大值和最小值数组。但是我们可以用四个变量做动态规划,因为dp[i]只用到了dp[i-1],不需要存所有的数组,因此只用cur_max,pre_max,cur_min,pre_min存当前最大值,前一个最大值,当前最小值和前一个最小值。由于pre_min乘上nums[i]后,可能变成最大值,而pre_max乘上nums[i]之后可能变成最小值,因此cur_max和cur_min都取决于pre_max*nums[i],pre_min*nums[i]和nums[i]本身。最后求出最大的cur_max即为所求答案。
实现代码
int maxProduct(vector<int>& nums) { int cur_max = nums[0], pre_max = nums[0], ans = nums[0]; int cur_min = nums[0], pre_min = nums[0]; for (int i = 1; i < nums.size(); i++) { cur_min = min(min(pre_max*nums[i],pre_min*nums[i]),nums[i]); cur_max = max(max(pre_max*nums[i],pre_min*nums[i]),nums[i]); pre_max = cur_max; pre_min = cur_min; ans = max(cur_max, ans); } return ans; }
阅读全文
0 0
- 第十五周leetcode题
- leetcode-第十五周
- 第十五周LeetCode
- 第十五周LeetCode
- 第十五周LeetCode
- 第十五周LeetCode
- 第十五周LeetCode
- 第十五周LeetCode
- LeetCode题解 第十五周
- Leetcode 算法习题 第十五周
- 第十五周LeetCode算法题两道
- leetcode【第十五周】路径求和 【二】
- 第十五周:[leetCode] 90. Subsets II
- 第十五周 leetcode 77. Combinations(Medium)
- leetcode第十五周解题总结--二分查找(二)
- 第十五周
- 第十五周
- 第十五周
- 南阳oj The Triangle
- 锁
- [Linux] 生成随机密码
- 递归专练C 经典汉诺塔问题
- 关于小白的我
- 第十五周LeetCode
- 2018第二届中国无人店大会 暨上海国际无人值守零售展览会
- mybatis 之 if test 条件
- 设计模式
- python Flask部分扩展介绍
- 02_张孝祥_Java多线程_传统定时器Timer
- linux学习笔记4
- java---异常处理
- 使用Flask form 制作注册表单,并使用bootstrap美化