分治策略解决最大子数组问题
2016-08-30 13:28
176 查看
分治策略的思路:
1.将问题分解为一些子问题,其中有的子问题的形式与原问题相同,只是规模更小
2.递归,求解使递归停止的边界条件
3.合并
对于最大子数组问题,
1.将问题分解为一些子问题,其中有的子问题的形式与原问题相同,只是规模更小
2.递归,求解使递归停止的边界条件
3.合并
对于最大子数组问题,
#include <iostream> using std::cout; inline int max(int a,int b,int c){return a>b?(a>c?a:c):(b>c?b:c);} int foo(int *p,int len) { //递归边界 if(1==len)return *p; //子问题1,求解数组以中点向两侧延伸情况下的最大值 int save,i,leftval,rightval; save=leftval=p[len/2-1]; rightval=p[len/2]; for(i=len/2-2;i>=0;i--) { save+=p[i]; if(save>leftval)leftval=save; } save=rightval; for(i=len/2+1;i<len;i++) { save+=p[i]; if(save>rightval)rightval=save; } int v1=max(leftval,rightval,leftval+rightval); //递归求解出数组中点两侧分别的最大值 int v2=foo(p,len/2); int v3=foo(p+len/2,len-len/2); //合并 return max(v1,v2,v3); } int main() { int a[]={-1,2,5,4,-3,-1}; cout<<foo(a,6)<<"\n"; return 0; }
相关文章推荐
- 分治策略__解决最大连续子数组的问题
- 最大子数组问题(分治策略实现)
- Leetcode121.+Leetcode53. Kadane算法解决最大子数组问题
- 【软件工程】解决求数组的子数组最大和问题
- 算法导论 最大子数组问题(分治策略)
- 分治策略 & 最大子数组的问题
- 动态规划解决“最大子数组”问题
- 分治策略求解最大子数组问题
- 第四章 分治策略 最大子数组问题
- 分治法解决最大子数组问题 (C/C++)
- 最大子数组问题-分治策略解法
- 分治法解决寻找数组中最大最小值的问题
- 利用数组作参数求最大值(感觉学了数组能很快的解决问题)
- c#数据结构之最大子数组问题(暴力解决法)
- PHP实现求连续子数组最大和问题2种解决方法
- 分治法解决最大子数组问题
- 分治法解决最大子数组问题
- 线性时间解决最大子数组问题
- 算法导论_最大子数组问题(分治策略)
- 算法导论_最大子数组问题(分治策略)