leetcode 53
思路
本题使用贪心算法,核心在于对每一个元素进行遍历,在遍历过程里,持续更新当前的子数组和以及最大子数组和
- 假设 sum 是当前的子数组和,max 是到目前为止最大的子数组和
- 遍历数组时,计算每个位置的当前子数组和,决定是否将当前元素加入之前的子数组,或者重新从当前元素开始一个新的子数组
算法步骤:
初始化:
max = nums[0],用于存储到目前为止最大的子数组和
sum = nums[0],表示当前子数组的和,初始化为第一个元素
从第二个元素开始遍历数组:
如果 sum > 0,说明当前的子数组和是正数
,可以继续加入当前元素(sum += nums[i])
如果 sum <= 0,说明当前的子数组和不再对后续的和产生积极影响,需要重新开始子数组
,更新 sum 为当前元素(sum = nums[i])
更新 max 为当前子数组和与之前最大子数组和的较大值
实现
var maxSubArray = function (nums) {let max = nums[0];let sum = nums[0]for (let i = 1; i < nums.length; i++) {if (sum > 0) {sum += nums[i]}else{sum = nums[i]}max = Math.max(max, sum)}return max;
};