53.1、题目描述
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
53.2、代码实现
var maxSubArray = function (nums) {
// 定义总和和最大值
let sum = 0, max = nums[0];
// 遍历数组
for (let num of nums) {
// 初始化时 num = -2
// 下一轮循环之后 sum = -2
// 因为最后需要返回的是数组元素的求和 所以需要判断 sum + num 与 num 的大小
// 就相当于是求 sum = Math.max(sum+num,num)
if (sum + num > num) {
sum = sum + num
} else {
sum = num
}
max = Math.max(max, sum)
}
return max;
};
var nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4];
console.log(maxSubArray(nums)); // 6
// @lc code=end
53.3、代码部分
/**
*
* arr.forEach(function(currentValue,index,array) , thisArg])
* currentValue 元素的值
* index 元素的索引
* array 被遍历的数组本身
*/
var maxSubArray = function (nums) {
// 定义总和和最大值
let sum = 0, max = nums[0];
// 遍历获得每一个元素
nums.forEach(function (num) {
// 因为需要返回的是最大总和 所以如果求出前面几个数字的和
// 还需要加上下一位数字计算和
sum = Math.max(sum + num, num);
max = Math.max(max, sum)
})
return max;
};
var nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4];
console.log(maxSubArray(nums)); // 6
// @lc code=end