最大子序列和问题--时间复杂度O(NlogN)

package a;
/*
* 最大子序列和问题,时间复杂度O(NlogN)
*/
public class Sequence {
private static int maxSumRec(int[] a,int left,int right ){
if(left==right)
if(a[left]>0)
return a[left];
else
return 0;
int center=(left+right)/2;
int maxLeftSum =maxSumRec(a,left,center);//递归求前部分最大值
int maxRightSum = maxSumRec(a,center+1,right);//递归求后部分最大值
//求前半部分含最后一个元素的最大值
int maxLeftBorderSum=0,leftBorderSum=0;
for(int i=center;i>=left;i--){
leftBorderSum+=a[i];
if(leftBorderSum>maxLeftBorderSum)
maxLeftBorderSum=leftBorderSum;
}
//求后半部分含第一个元素的最大值
int maxRightBorderSum=0,rightBorderSum=0;
for(int i=center+1;i<=right;i++){
rightBorderSum+=a[i];
if(rightBorderSum>maxRightBorderSum)
maxRightBorderSum=rightBorderSum;
} return max3(maxLeftSum,maxRightSum,maxLeftBorderSum+maxRightBorderSum);
}
//求最大值
private static int max3(int maxLeftSum, int maxRightSum, int q) {
// TODO Auto-generated method stub
int max;
if(maxLeftSum>maxRightSum)
max=maxLeftSum;
else
max=maxRightSum;
if(q>max)
max=q;
return max;
} public static void main(String[] args){
int[] a={4,-3,5,-2,-1,2,6,-2};
System.out.println(maxSumRec(a, 0, a.length-1));
}
}

最新文章

  1. mysql的优化
  2. ASP.NET Web API自身对CORS的支持:从实例开始
  3. JDBC与Hibernate中SQL语句参数设置的顺序问题
  4. Scrum 的相关概念
  5. Android Studio你不知道的调试技巧
  6. 新建cocos2d-xproject
  7. Kafka测试
  8. 超级素数幂 java
  9. GMF常见问题
  10. this的取值
  11. numpy使用总结
  12. sql注入--双查询报错注入
  13. Convolutional Neural Network in TensorFlow
  14. linux centos7添加ip黑名单禁止某个ip访问
  15. 【PPT大放送】MPD软件工作坊北京站圆满落幕 深圳站即将开幕!
  16. video兼容--可用
  17. tensorflow的save和restore
  18. python全栈 字符串,整数,bool 数据类型运用
  19. 常见HTTP状态码(200、301、302、500等)解说
  20. DataSet转换成List&lt;&gt;

热门文章

  1. mysql 查看索引
  2. mxonline实战5,用户注册的验证码
  3. 【性能测试】:loadrunner直压MYSQL数据库的脚本开发
  4. OPENERP 中自定义模块 找不到的问题
  5. Visual Studio 跨平台開發實戰(1) - Hello Xamarin! (转帖)
  6. (转)漫谈JVM
  7. jQuery多库共存问题解决方法
  8. 基于angularJS的表单验证练习
  9. c++面试题中经常被面试官面试的小问题总结(二)(本篇偏向指针知识)
  10. CPU漏洞补丁修复导致KeServiceDescriptorTable获取变更