前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每天手撕一道算法-53. 最大子序和

每天手撕一道算法-53. 最大子序和

作者头像
编程之心
发布2020-08-28 08:33:31
4180
发布2020-08-28 08:33:31
举报
文章被收录于专栏:编程之禅编程之禅
53. 最大子序和

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

示例:

代码语言:javascript
复制
输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

解析:

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
[-2,1,-3,4,-1,2,1,-5,4]

max = -2
tmp = 0    

tmp = Math.max(1, 1);
max = 1
    
tmp = Math.max(1 + -3, -3);    
max = 1    
在这里插入图片描述
在这里插入图片描述

遍历数组。

遍历数组。

max记录当前最大子序列和。

更新tmp要么接续连续+新值,要么是新值。

(思想就是动态规划,来了新值,选择继续连续 还是 新值)

然后比较max与tmp值。

如果连续的结果/新值 tmp 结果变大了,就更新max = tmp。没变大,还是原来的max。

代码语言:javascript
复制
class Solution {
    public int maxSubArray(int[] nums) {
        int serial = 0, max = nums[0]; // 设置连续值为0,最大值默认为首个值。
        for(int num : nums) { // 遍历数组
            serial = Math.max(num, num + serial); // serial要么选择连续,要么选择新值
            max = Math.max(max, serial); // 比较上个最大值与当前连续/新值哪个更大
        }
        return max;
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 53. 最大子序和
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档