数据结构与算法 求最大子序列

来源:互联网 发布:ios5.0.1软件下载 编辑:程序博客网 时间:2024/05/16 12:40

1.递归:

分别求出左半部、右半部以及包含中间部分的最大值。


public int maxSum(int[] a,int left,int right){if(left==right){return a[left];                 //基准情形}  int center=(left+right)/2;int maxleft=maxSum(a,left,center);int maxright=maxSum(a,center+1,right);  int leftsum=0,maxleftsum=Integer.MIN_VALUE;for(int i=center;i>=left;i--){leftsum+=a[i];if(maxleftsum<leftsum){maxleftsum=leftsum;}}int rightsum=0,maxrightsum=Integer.MIN_VALUE;for(int i=center+1;i<=right;i++){rightsum+=a[i];if(maxrightsum<rightsum){maxrightsum=rightsum;}}return max3(maxleftsum+maxrightsum,maxleft,maxright);}public int max3(int a,int b,int c){return a>=b?(a>=c?a:c):(b>=c?b:c);}

2.最佳算法:

public int maxSum(int[] a){int max=Integer.MIN_VALUE,sum=0;for(int i=0;i<a.length;i++){sum+=a[i];if(max<sum)max=sum;else if(sum<=0)sum=0;}return max;}


0 0
原创粉丝点击