LeetCode53. 最大子序和
题目描述
/**
*
* 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),
* 返回其最大和。
*
*/
思路分析
- 求最大子序和,可以考虑使用递归的思路,从第一个元素开始,记录当前项的前一项子串的最大子序和
- 用前一项的最大子序和 + 当前项 与 当前项元素比较大小,大者则为当前项的最大子序和
- 再用一个变量记录所有子序和的最大值,每次比较更新
- 则在遍历数组结束时就已经记录了该数组的最大子序和
- 详解见下源码
源码及分析
/**
*
* @param nums 求子序和是数组
* @return 返回最大子序和
*/
public int maxSubArray(int[] nums) {
//定义preMax保存当前位置前一项的连续子串的最大值和
int preMax = 0;
//定义max保存连续子串的最大和,默认为数组第一个元素的大小
int max = nums[0];
for (int num : nums) {
//如果前 n - 1 连续子串的和加上第 n 项的和小于第n项,则前n 项子串的最大值为 第n项的num
preMax = Math.max(preMax + num, num);
//max总是记录当前最大子串和
max = Math.max(max, preMax);
}
return max;
}