20140313

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);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值