package com.utils.algorithm; import java.util.ArrayList; import java.util.Random; public class MaximumSubsequenceSum { //最大子序列和问题 public static void main(String[] args) { int length = 10; int[] a = new int[length]; //随机产生[-10,10] 之间整数 for (int i = 0; i < length; i++) { int randomNum = new Random().nextInt(20) - 9; //-10--->10之间 a[i] = randomNum; System.out.print(randomNum + " "); } System.out.println(); int maxSum = maxSubSum4(a); System.out.println("maxSum :" + maxSum); } //最大子序列求和(有正数也有负数) public static int maxSubSum4(int[] a) { int maxSum = 0, thisSum = 0; //初始化最大和为0, 以及内部循环的序列和为0 for (int j = 0; j < a.length; j++) { thisSum += a[j]; if (thisSum > maxSum) { maxSum = thisSum; //如果当前的数a[i]>0,那么maxSum肯定会改变 } else if (thisSum < 0) { thisSum = 0; //如果序列和thisSum因为加上a[i]会变成负数,那么从i+1开始重新thisSum 看是否有数据>之前的maxSum } } return maxSum; } }