package soloproject; /** * 最大子序和 * * @author GGGXXC * */ public class MaxSubseqSum { public static void main(String[] args) { int[] nums = new int[] { -2, 1, -3, 4, -1, 2, 1, -5, 4 }; System.out.println(maxSubArray(nums)); } /** * 最大子序和核心算法 * * @param nums 传入的数组 * @return 返回最大和 */ public static int maxSubArray(int[] nums) { /** * 初始值设置为数组第一项,保存的为当前最大子序和 */ int allSum = nums[0]; /** * 当数组中出现负值后,重新开始的新子序和 */ int curSum = 0; for (int n : nums) { if (curSum < 0) { curSum = 0; } /** * 加上新数字之后的新子序和和历史最大子序和进行比较 */ curSum += n; allSum = Math.max(allSum, curSum); } return allSum; } }