/*
10 5 -3 12 -31 15 22 -7 6 -8 -9 10 ....
暴力:O(n^3)
分治:[ mid ) 三种情况求最大
基线法: O(n)
2个数组:
从左到本位:出现的最大累加
从左到本位:累加的最小值
网搜:最大连续和
*/
public class A
{
// 对a, [p,q) 区间求最大连续和
public static int g(int[] a, int p, int q)
{
if(q-p==1){
if(a[p]>0) return a[p];
return 0;
}
int mid = (p+q)/2;
int max = 0;
int m1 = g(a,p,mid);
if(m1>max) max = m1;
int m2 = g(a,mid,q);
if(m2>max) max = m2;
// 中间向左扩展搜索
int m3a=0;
int sum = 0;
for(int i=mid; i>=p; i--){
sum += a[i];
if(sum>m3a) m3a = sum;
}
// 中间向右扩展搜索
int m3b=0;
sum = 0;
for(int i=mid+1; i<q; i++){
sum += a[i];
if(sum>m3b) m3b = sum;
}
int m3 = m3a + m3b;
if(m3>max) max = m3;
return max;
}
public static int f(int[] a)
{
int max = 0;
for(int i=0; i<a.length; i++)
for(int j=i+1; j<a.length+1; j++){
int sum = 0;
for(int k=i; k<j; k++) sum += a[k];
if(sum > max) max = sum;
}
return max;
}
public static void main(String[] args)
{
final int N = 2000;
int[] a = new int[N];
for(int i=0; i<a.length; i++){
a[i] = (int)(Math.random() * 100) - 50;
}
System.out.println(f(a));
System.out.println("-----------------------");
System.out.println(g(a,0,a.length));
}
}
java实现最大连续和问题
原创
©著作权归作者所有:来自51CTO博客作者热爱学习的发呆哥的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:java实现指数问题
下一篇:java实现指数问题
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
力扣解题 485.最大连续 1 的个数
[485] 最大连续 1 的个数
leetcode -
java获取当月最大日
java获取当月最大日
System java 字段 -
JAVA 最大堆方法使用
JAVA 最大堆方法使用
System Java ci -
最大连续区间和问题
2017-08-27 16:38:47 writer:pprp 最大连续区间和,可以有很多种方法实现,其中最常见的是运用一维前缀和还有动态规划来解决的; 代码如下:
最大连续区间和 i++ 区间和 前缀和 mysql -
最大连续子序列,Java实现
算法真的是太神奇了!!!初步实现:思路◼ 给定
算法 java 动态规划 leetcode 子序列 -
Java实现最大连续子数组和
1 问题描述给定一个整数数组,数组里可能有正...
子数组 数组 动态规划法 i++ 赋值
















