前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法-求最大子序列和

算法-求最大子序列和

作者头像
Fisherman渔夫
发布2019-07-31 14:50:15
7050
发布2019-07-31 14:50:15
举报
文章被收录于专栏:渔夫

题目描述:

转载来自于Rui用户解题思路 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

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

方法:

实际上我曾经疑惑过怎么在变量少构建而且有用动态规划的方式去完成此题: 下面的代码很好的解决了这个矛盾:

代码语言:javascript
复制
代码1:
class Solution {
public int maxSubArray(int[] nums) {
    int res = nums[0];
    int sum = 0;
    for (int num : nums) {
        if (sum > 0)
            sum += num;
        else
            sum = num;
        res = Math.max(res, sum);
    }
    return res;
}
}

分析:

实际上很有意思的事情,这和股票那几道题目十分相似: 核心就是动态规划;在发现前面的求和总数为负数的时候重新选择求和索引开头用了一下语句

代码语言:javascript
复制
       if (sum > 0)
            sum += num;
        else
            sum = num;

不可谓不精妙,不需要多定义一个求和起点(毕竟不要求返回最终数组的首尾元素索引),用sum = num来表示这个过程更加精彩。

原理:

设sum<=0,那么后面的子序列肯定不包含目前的子序列,所以令sum = num;如果sum > 0对于后面的子序列是有好处的。res = Math.max(res, sum)保证可以找到最大的子序和。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年05月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
    • 方法:
      • 分析:
        • 原理:
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档