您的位置:首页 > 其它

数组最大子序列和

2014-09-22 12:57 232 查看
package com.google.android;

public class GreatestSumOfSubArray {
public static void main(String[] args) {
int[] data = {1, -2, 3, 10, -4, 7, 2, -5};//null,{},{-1}
if (data==null||data.length==0) {
System.out.println("data is empty");
return;
}
int max = Integer.MIN_VALUE;
int maxStart = 0, maxEnd = 0, start = 0;
int sum = 0;
for (int i = 0; i < data.length; ++i) {
int n = data[i];
if (sum <= 0) {//sum+n<=n
// 如果原来的和为负数,则只会拖n的后退,故开始新的子序列计算
sum = n;
start = i;
} else {
sum += n;
}

if (sum > max) {
max = sum;
maxStart = start;
maxEnd = i;
}
}
System.out.println("Max Sum is "+max+" # ["+maxStart+","+maxEnd+"]");
for (int i = maxStart; i <= maxEnd && i < data.length; i++) {
System.out.print(data[i] + "\t");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: