LeetCode Maximum Subarray Maximum Product Subarray DP问题
来源:互联网 发布:韩顺平mysql基础视频 编辑:程序博客网 时间:2024/06/05 11:43
Maximum Subarray
题目:
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4]
,
the contiguous subarray [4,-1,2,1]
has the largest sum = 6
.
思想:
这是个典型的动态规划的问题,求的子序列的最大值。在每一步,我们可以维护两个变量。局部最优(必须包含当前元素的最优的解):用DP[N]数组 表示以下标N结尾元素的最大值。全局最大值(就是到当前元素为止的最优解):用一个gloabl表示 找到DP[N]数组中的最大值。
DP[I] = Max(DP[I-1]+nums[i],nums[i]);//DP的动态转移方程 每遍历一遍DP[I]可以判断gloabl的最大值
可以看到DP[i]的转移是与DP[I-1]前一个元素有关 那么DP可以使用滚动数组进行优化 用一个遍历Max_local表示即可
时间O(N) 空间O(1)
AC代码:
class Solution {public: int max(int a,int b){return a>b?a:b;}; int min(int a,int b){return a<b?a:b;}; int maxSubArray(vector<int>& nums) { int len =nums.size(); if(len<=0) return 0; int global = nums[0]; int max_local = nums[0]; for(int i=1;i<len;i++){ max_local = max(max_local+nums[i],nums[i]); if(global<max_local) global = max_local; } return global; }};
Maximum Product Subarray
题目:
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
思想:
这个问题和上面一题类似,也是用动态规划求解,不同的是这题是求子序列乘法的最大值。不像上一题累加结果只要是正的一定是递增,而乘法中可能现在看起来是负的,而后面跟个负数相乘就会得到最大的乘积。其实只需要3定义3个变量,一个局部最小值,一个局部最大值,一个全局最大值就能线性的时间完成最大值的求解
时间O(N) 空间O(1)
代码:
class Solution {public: int max(int a,int b){return a>b?a:b;}; int min(int a,int b){return a<b?a:b;}; int maxProduct(vector<int>& nums) { int len = nums.size(); if(len<=0) return -1; int max_local = nums[0];//局部最大值,以最后一个元素结尾 int min_local = nums[0];//局部最小值,以最后一个元素结尾 int gloabl = nums[0];//全局最大值 for(int i=1;i<len;i++){ //cout<<max_local<<" "<<min_local<<endl; int premax = max_local; max_local = max(max(max_local*nums[i],nums[i]),min_local*nums[i]); min_local = min(min(min_local*nums[i],nums[i]),premax*nums[i]); if(max_local>gloabl) gloabl = max_local; } return gloabl; }};
- LeetCode Maximum Subarray Maximum Product Subarray DP问题
- DP Leetcode - Maximum Product Subarray
- 【Leetcode】Maximum Product Subarray (DP)
- LeetCode 53/152 Maximum Subarray/Maximum Product Subarray---DP **
- Maximum Product Subarray 【LeetCode】
- [LeetCode] Maximum Product Subarray
- leetcode-Maximum Product Subarray
- Maximum Product Subarray -- LeetCode
- LeetCode-Maximum Product Subarray
- [LeetCode]Maximum Product Subarray
- [LeetCode]Maximum Product Subarray
- 【LeetCode】Maximum Product Subarray
- leetcode:Maximum Product Subarray
- leetcode: Maximum Product Subarray
- Leetcode: Maximum Product Subarray
- [LeetCode]Maximum Product Subarray
- Leetcode Maximum Product Subarray
- [Leetcode]Maximum Product Subarray
- 正则表达式中的数量词概念
- 未结束的字符串常量
- Android通过DownloadManager实现App的版本更新功能
- VS2013 断点总是乱跳
- 猫眼电影TOP100爬取
- LeetCode Maximum Subarray Maximum Product Subarray DP问题
- 第七单元
- SQL入门的问题(1)
- JAVA代理模式
- 常用权限和依赖
- mysql 5.7 binary 二进制版本安装 for linux 7
- 基础运维7
- mongodb性能分析方法:explain()
- Blog3@linux关于man命令的用法