动态规划解152. Maximum Product Subarray
来源:互联网 发布:互联网大数据技术 编辑:程序博客网 时间:2024/06/18 06:01
题目
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.
题目解析
这是一个找集合中连续数相乘最大值的问题
思路解析
传统的解法就是两层for循环找到连续数相乘最大值,复杂度为o(n^2),但是可以通过动态规划去优化。就举题目的例子作为讨论,因为我们要返回集合中连续数相乘最大值,用TrueMax代替,遍历数组时候的最大值就用Max去代替。
如果单单从题目的例子,似乎我们很简单得到动态方程, Truemax = max(max, max*nums[i]),但这样未免考虑太不周到了,如果在题目的基础上再加一些数,比如[2,3,-2,4,5,-7],那么根据这个简单的动态方程就会得不到正确的结果,关键的地方在于但没有考虑负数可以连乘的情况,因此我们还要去设置Min去记录遍历过程中的最小值。考虑到负数相乘Min可能会变成Max的情况,我们得到动态方程:
Max = max(nums[i], max(partmax, partmin));
Min = std::min(nums[i], std::min(partmax, partmin));
注:partmax = Max * nums[i], partmin = Min * nums[i], 这里为什么要与nums[i]去比较最大与最小呢?试想一下这个例子[0,2],如果没有跟nums[i]去比较,那么结果就会返回0,而不是2
AC代码
class Solution {public: int maxProduct(vector<int>& nums) { if (nums.size() == 1) return nums[0]; else if (nums.size() > 1) { int Max, Min, TrueMax; TrueMax = Max = Min = nums[0]; for (int i = 1; i < nums.size(); ++i) { int partmax = Max * nums[i], partmin = Min * nums[i]; Max = std::max(nums[i], std::max(partmax, partmin)); Min = std::min(nums[i], std::min(partmax, partmin)); TrueMax = std::max(TrueMax, Max); } return TrueMax; } return 0; }};
- 动态规划解152. Maximum Product Subarray
- 152. Maximum Product Subarray 动态规划
- 【Leetcode】152. Maximum Product Subarray 【动态规划】
- (动态规划)LeetCode#152. Maximum Product Subarray
- 动态规划中级教程(leetcode)152.Maximum Product Subarray
- [C++]LeetCode: 96 Maximum Product Subarray(动态规划)
- leetcode 152. Maximum Product Subarray 最大连乘子序列 + DP动态规划
- 用动态规划解决(maximum sum subarray and maximum product subarray)
- leetcode做题总结,动态规划II(Maximum Subarray, Maximum Product Subarray)
- leedcode做题总结,动态规划II(Maximum Subarray,Maximum Product Subarray)
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 数据库视频——创建数据库
- 怎么解决XAMPP中Apache80,443以及MySQL3306端口被占用
- OPENGL-学习计算机图形学
- 序列化 保存到一个文件
- 剑指offer之八---变态跳台阶
- 动态规划解152. Maximum Product Subarray
- 函数指针作函数参数/用函数指针调用函数
- Mohican_9/21 基本数据类型
- 动态规划-494. Target Sum
- leetcode--BinarySearch
- android内存泄露:handler
- 算法排序(1):总述
- rdd,dataframe,dataset之间的区别
- 水题