数组最大子序列和

来源:互联网 发布:dota2饰品淘宝店 编辑:程序博客网 时间:2024/05/20 22:26
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");}}}

0 0
原创粉丝点击