首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >每天手撕一道算法-53. 最大子序和

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

作者头像
编程之心
发布于 2020-08-28 08:33:31
发布于 2020-08-28 08:33:31
6290
举报
文章被收录于专栏:编程之禅编程之禅
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 删除
目录
  • 53. 最大子序和
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档