动态规划_最大子数组||_1
来源:互联网 发布:狸窝for mac 编辑:程序博客网 时间:2024/06/05 05:08
1. 【问题描述】 最大子数组||
2. 【思路】 假设给定数组共有N个元素,令符号(i, j)表示子数组nums[i,i+1,...,j]的最大子数组的和,则所求为:
max{(0,0)+(1,N-1),(0,1)+(2,N-1),...,(0,N-2)+(N-1,N-1)},即需要求出(0,i)和(i+1,N-1),其中
0<=i<=N-2.用一维数组dp0保存(0,i)的值,初始化dp0[0]=(0,0)=nums[0],用符号[0,i]表示子数组nums[0,1,...,i]包含元素nums[i]的最大子数组和,则有:dp0[i]=max{dp0[i-1],[0,i]}. 其中1<=i<=N-2;
用一维数组dpN保存(j,N-1)的值,初始化dpN[N-1]=(N-1,N-1)=nums[N-1],用符号【j,N-1】表示子数组nums[j,j+1,...,N-1]包含元素nums[j]的最大子数组的和,则有:dpN[j]=max{dpN[j+1],【j,N-1】}.
分析[0,i]和【j,N-1】可以发现:
[0,0]=nums[0];
[0,i]=max{nums[i],[0,i-1]+nums[i]}; 1<=i<=N-2
【N-1,N-1】=nums[N-1],
【j,N-1】=max{nums[j],【j+1,N-1】+nums[j]}; 1<=j<=N-1
下面的代码中用dp0_[i]保存[0,i],用dp_N[j]保存【j,N-1】
3. 【代码】
class Solution {public: /** * @param nums: A list of integers * @return: An integer denotes the sum of max two non-overlapping subarrays */ int maxTwoSubArrays(vector<int> nums) { // write your code here int N=nums.size(); if(N<=0) { return 0; } vector<int> dp0_(N-1,0); dp0_[0]=nums[0]; for(int i=1;i<N-1;++i) { dp0_[i]=nums[i]>=(dp0_[i-1]+nums[i])?nums[i]:(dp0_[i-1]+nums[i]); } vector<int> dp_N(N,0); dp_N[N-1]=nums[N-1]; for(int j=N-2;j>=1;--j) { dp_N[j]=nums[j]>=(dp_N[j+1]+nums[j])?nums[j]:(dp_N[j+1]+nums[j]); } vector<int> dp0(N-1,0); dp0[0]=nums[0]; for(int i=1;i<N-1;++i) { dp0[i]=dp0[i-1]>=dp0_[i]?dp0[i-1]:dp0_[i]; } vector<int> dpN(N,0); dpN[N-1]=nums[N-1]; for(int j=N-2;j>=1;--j) { dpN[j]=dpN[j+1]>=dp_N[j]?dpN[j+1]:dp_N[j]; } int res=INT_MIN; for(int i=0;i<N-1;++i) { res=res>=(dp0[i]+dpN[i+1])?res:(dp0[i]+dpN[i+1]); } return res; }};
0 0
- 动态规划_最大子数组|||_1
- 动态规划_最大子数组||_1
- 分而治之_最大子数组_1
- 动态规划 最大子数组
- 动态规划_最长公共子序列_1
- 子数组最大和 动态规划求解
- 最大子数组问题【动态规划】
- 动态规划之最大子数组
- 动态规划——最大子数组
- 最大子数组之和(动态规划)
- 动态规划-----最大子数组问题等
- 最大子数组求法--动态规划
- 动态规划-最大连续乘积子数组
- 动态规划-最大子数组和问题
- 动态规划-最大子数组和问题
- 动态规划——数组最大子数组和
- 动态规划——数组最大子数组和 收藏
- 动态规划——数组最大子数组和
- Sublime Text (3103版本可用) 注册码 License Key
- java垃圾回收
- 外部碎片和内部碎片的区别
- 文章标题
- Using AfxBeginThread for multi-thread in VS C++
- 动态规划_最大子数组||_1
- Sublime Text3注册码(可用)(第一个自测)
- windows 调用Linux集群运行过程详解
- 生成元
- Struts2学习——0700访问Web元素
- Struts2入门(HelloWorld案例)
- AngularJS+RestfulAPI+BasicAuth+Python/PHP/Node.JS来实现一个最简单的新闻管理后台
- My SQL 子查询
- Evennia-Directory Overview