package dynamic_programming;
class Type {
int sum;
int begin;
int end;
Type(int sum, int begin, int end) {
this.sum = sum;
this.begin = begin;
this.end = end;
}
Type copy() {
return this;
}
}
public class DynamicProgramming {
public static void main(String[] args) {
int[] a = new int[] { -3, 2, 4, 5, -7, -5, 6, 7, 8, -5, 2, 3, -2};
System.out.println("数组为:");
for(int tem: a)
System.out.print(tem + " ");
System.out.println();
showMax(a);
}
public static void showMax(int[] n) {
int temp = 0;
Type type1 = new Type(n[0], 0, 0);
Type type2 = new Type(n[0], 0, 0);
for (int index = 0; index < n.length; index++) {
if (temp < 0) {
temp = n[index];
if(type2.sum < type1.sum){
type2 = type1.copy();
}
type1 = new Type(n[index], index, index);
} else {
temp += n[index];
}
if (type1.sum <= temp) {
type1.sum = temp;
type1.end = index;
}
}
if(type2.sum < type1.sum){
type2 = type1.copy();
}
System.out.println("开始位置索引:" + type2.begin);
System.out.println("结束位置索引:" + type2.end);
System.out.println("最大子数组和:" + type2.sum);
}
}
20140313
最新推荐文章于 2018-09-03 21:55:34 发布