最大子序列和问题--时间复杂度O(NlogN)
2024-08-29 17:31:21
最大子序列和问题--时间复杂度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));
}
}
最新文章
- mysql的优化
- ASP.NET Web API自身对CORS的支持:从实例开始
- JDBC与Hibernate中SQL语句参数设置的顺序问题
- Scrum 的相关概念
- Android Studio你不知道的调试技巧
- 新建cocos2d-xproject
- Kafka测试
- 超级素数幂 java
- GMF常见问题
- this的取值
- numpy使用总结
- sql注入--双查询报错注入
- Convolutional Neural Network in TensorFlow
- linux centos7添加ip黑名单禁止某个ip访问
- 【PPT大放送】MPD软件工作坊北京站圆满落幕 深圳站即将开幕!
- video兼容--可用
- tensorflow的save和restore
- python全栈 字符串,整数,bool 数据类型运用
- 常见HTTP状态码(200、301、302、500等)解说
- DataSet转换成List<;>;