【 LeetCode 】53、最大子序和

本文介绍了一种寻找具有最大和的连续子数组的方法,并通过JavaScript实现了该算法。通过对数组进行遍历,比较并记录子数组的最大和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值