题干
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
思路:贪心
此题主要是寻找子问题,子问题每循环一次记录前面值的和,但是如果到当前元素时,前面和为小于0的数,则舍弃,因为小于0后我们的子数列之和没有什么意义。因为我们的数列之和如果为负数的话,再去相加也就没有什么意义。
可以参考一下这个动画:练习地址
代码:
执行用时:96 ms, 在所有 JavaScript 提交中击败了87.54%的用户
内存消耗:38.6 MB 在所有 JavaScript 提交中击败了99.67%的用户
var maxSubArray = function (nums) {
let per = nums[0]
let maxCount = nums[0]
for (let i = 1; i < nums.length; i++) {
per = per < 0 ? nums[i] : per + nums[i]
maxCount = Math.max(maxCount, per)
}
return maxCount
};