import java.util.LinkedList;
import java.util.List;
public class E42GreatestSumOfSubArray {
//找出数组中连续子数组的最大和
//动态规划思想:max(f(data[i])),f(data[i])为以第i个元素结尾的连续子数组之和
public static int getGreatestSum(int[] data, int length){
if (data == null || length <= 0)
throw new IllegalArgumentException("Invalid Input");
int currentSum = 0;
int greatestSum = 0x80000000;
//保存和最大的连续子数组
//List<Integer> list = new LinkedList<>();
for (int i = 0; i < length; i ++){
if (currentSum < 0) {
currentSum = data[i];
//list.clear();
}
else{
currentSum += data[i];
//list.add(data[i]);
}
if (currentSum > greatestSum)
greatestSum = currentSum;
}
//输出和最大连续子数组,用于测试
//for (int number : list)
//System.out.printf("%d\t", number);
return greatestSum;
}
public static void main(String[] args){
int[] data = {1, 2, -1, 6, 7, -5, 12};
System.out.println("\nSum: " + E42GreatestSumOfSubArray.getGreatestSum(data, 7));
}
}
连续子数组的最大和(Java实现)
最新推荐文章于 2022-08-23 02:58:13 发布