LeetCode题解 => 53.最大子序合(三十六)

最大子序和

一、LeetCode题解

瞧一瞧~

二、算法题

题目

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

输入:[-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

解法(动态规划)

思路

假设你是一个选择性遗忘的赌徒,数组表示你这几天来赢钱或者输钱,

  • 你用sum来表示这几天来的输赢,
  • 用temp来存储你手里赢到的最多的钱,
  • 如果昨天你手上还是输钱(sum < 0),你忘记它,明天继续赌钱;
  • 如果你手上是赢钱(sum > 0), 你记得,你继续赌钱;
  • 如果你一直在数钱,也请记住你输的最少的那次
  • 你要记得你手气最好的时候
var maxSubArray = function(nums) {
    var temp = nums[0]
    var sum = 0
    for(let i = 0; i < nums.length; i++){
        if(sum > 0){
            sum += nums[i] //组合>0,则是优势组合,保留
        }else{
            sum = nums[i] // 组合<0,则是劣势组合,直接覆盖
        }
        temp = Math.max(temp, sum),//维护最大的组合和或最大的单个值
    }
    return temp
};
结果

在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页