题目:最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
输入:nums = [1]
输出:1
输入:nums = [5,4,-1,7,8]
输出:23
分析
【贪心算法】局部最优推全局最优。
1)首先,我们的全局目标是得到最大和,局部目标是找到一个子数组和最大。
2)使用贪心算法,循环判断。找到一个子数组的和比sum大就赶紧赋值给sum;当前子数组的和小于零,则count = 0重新开始计算子数组,目的是找到更大的子数组和。
3)最后,返回sum中保存的全局最大子数组和。
代码
/**
* @param {number[]} nums
* @return {number}
*/
// 贪心算法
//> 局部最优解:当前“连续和”为负数的时候立刻放弃
//> 全局最优解:选取最大“连续和”
var maxSubArray = function(nums) {
// sum一开始要赋为最小值:负无穷
let sum = -Infinity
let count = 0
for(let i=0;i<nums.length;i++){
count += nums[i]
if(count > sum){
sum = count
}
if (count < 0){
count = 0
}
}
return sum
};