LeetCode Maximum Subarray Maximum Product Subarray DP问题
2017-10-10 15:46
423 查看
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结尾元素的最大值。全局最大值(就是到当前元素为止的最优解):用一个gloabl表示 找到DP
数组中的最大值。
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 53/152 Maximum Subarray/Maximum Product Subarray---DP **
- LeetCode Maximum Product Subarray_DP_最大子数组
- Leetcode之Maximum Product Subarray 问题
- 【Leetcode】Maximum Product Subarray (DP)
- leetcode--Maximum Product Subarray
- leetcode. Maximum Product Subarray
- LeetCode Maximum Product Subarray
- LeetCode[Dynamic Programming]: Maximum Product Subarray
- Leetcode Maximum Product Subarray
- LeetCode题解:Maximum Product Subarray
- 【LeetCode刷题Java版】Maximum Product Subarray
- [LeetCode] Maximum Product Subarray
- leetcode--Maximum Product Subarray
- LeetCode OJ 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