求解最大连续子序列和问题
2019-03-17 21:59
127 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/beilunc7/article/details/88628116
[code]import java.util.*; public class Main{ static int max(int a,int b,int c){//返回最大值 if(a<b) a=b; if(a<c) return c; else return a; } static int maxSubSum(int[] a,int left,int right){ if(left==right){//只有一个元素 if(a[left]>=0) return a[left]; else return 0;//最后的结果至少是0 } int mid=(left+right)/2; int maxLeftSum=maxSubSum(a,left,mid);//该子序列完全落在左半部 int maxRightSum=maxSubSum(a,mid+1,right);//该子序列完全落在右半部 /*该子序列跨越左右两个半部分*/ int maxLeftBoderSum=0,leftBoderSum=0; for(int i=mid;i>=left;i--){//得到落在左半部分的子序列的最大和 leftBoderSum+=a[i]; if(leftBoderSum>maxLeftBoderSum) maxLeftBoderSum=leftBoderSum; } int maxRightBoderSum=0,rightBoderSum=0; for(int i=mid+1;i<=right;i++){//得到落在右半部分的子序列的最大和 rightBoderSum+=a[i]; if(rightBoderSum>maxRightBoderSum) maxRightBoderSum=rightBoderSum; } return max(maxLeftSum,maxRightSum,maxLeftBoderSum+maxRightBoderSum); } public static void main(String[] args){ Scanner in=new Scanner(System.in); int n=in.nextInt(); int[] a=new int ; for(int i=0;i<n;i++) a[i]=in.nextInt(); System.out.println(maxSubSum(a,0,n-1)); } }
相关文章推荐
- 最大连续子序列和问题O(N)复杂度
- 【数据结构与算法】最大子序列和问题的求解
- hdu-1003-动态规划-求连续子序列最大和问题
- 最大连续子序列问题的java实现
- 关于最大连续子序列问题的解法
- 最大自序列和问题的求解
- 最大连续子序列求和问题
- 算法设计与分析——最大连续子序列之和问题
- 六种姿势拿下连续子序列最大和问题
- HDU 2845 Beans (最大不连续子序列和)(压缩求解)
- LeetCode#53暨最大连续子序列和问题
- 【编程珠玑-读书笔记】算法设计技术—以求解"最大连续子序列和"为例
- 关于最大连续子序列和的问题 (Maximum Subsequence Sum Problem)
- 总结java最大连续子序列和的问题
- 最大子序列和问题求解
- 最大连续子序列和的问题
- 一个简单的问题- 最大连续子序列和
- 最大子序列和问题的求解(时间复杂度为O(N))
- HDU 1003 1231 (六种姿势拿下连续子序列最大和问题)
- 1003---求最大连续子序列和的动态规划问题