这道题是LeetCode里的第53道题。

题目描述:

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

示例:

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

进阶:

如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

简单的动态规划题,如果之前接触过动态规划的话很容易得出答案,没有的话估计得想一阵子。

不多废话,我先介绍一下什么是动态规划吧:动态规划(Dynamic Programming)是一种分阶段求解决策问题的数学思想。总的来说就是“大事化小,小事化了”。

动态规划中包含的三个重要概念:

  1. 最优子结构
  2. 边界
  3. 状态转移方程

就拿这道题目来说,假设输入[-2,1,-3,4,-1,2,1]数组,要求其连续子数组的最大和。那它的最优子结构是什么?注意到题目要求的是连续子数组最大和。既然这样,那么求[-2,1,-3,4,-1,2,1]的连续子数组的最大和,去掉其最后一位,就可以转为求[-2,1,-3,4,-1,2]的连续子数组的最大和,因为这样可以保证它是连续的。而求[-2,1,-3,4,-1,2]的连续子数组的最大和,又是求[-2,1,-3,4,-1]的连续子数组的最大和。这样一步一步简化它。边界就是问题的范围,不可能是无穷大。这个题目的边界就是原数组的长度7。而状态转移方程呢?这是最难找的。在这里我们假设res变量保存结果即最大和,sum变量保存子结构的连续和。就拿这个例子来说。

第一步:sum<0,sum=1,sum>res→res=sum=1(sum初值为-2,res初值为0)

第二步:sum>0,sum=sum+(-3)=-2,sum<res→res=res=1

第三步:sum<0,sum=4,sum>res→res=sum=4

第四步:sum>0,sum=sum+(-1)=3,sum<res→res=res=4

第五步:sum>0,sum=sum+2=5,sum>res→res=sum=5

第六步:sum>0,sum=sum+1=6,sum>res→res=sum=6

到达边界结束

代码如下:

class Solution {
public:
int maxSubArray(vector<int>& nums) {
int res = nums[0];
int sum = 0;
for(int num : nums){
if(sum > 0)sum += num;
else sum = num;
res = res>sum?res:sum;
}
return res;
}
};

第六行的代码是一个迭代器遍历,对于数组来说,等同于

for(int i=0;i<nums.length;i++){

int num=nums[i];

......

}

运行结果:

个人总结:

第一次正式接触动态规划题目,感觉动态规划题是我的短板,需要多加练习。这次也学到了新语法。

【LeetCode】Maximum Subarray(最大子序和)的更多相关文章

  1. 【LeetCode】53. Maximum Subarray 最大子序和 解题报告(Python & C++ & Java)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力解法 动态规划 日期 题目地址: https:/ ...

  2. LeetCode 53. Maximum Subarray最大子序和 (C++)

    题目: Given an integer array nums, find the contiguous subarray (containing at least one number) which ...

  3. [LeetCode] Maximum Subarray 最大子数组

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  4. 53. Maximum Subarray最大子序和

    网址:https://leetcode.com/problems/maximum-subarray/submissions/ 很简单的动态规划 我们可以把 dp[i] 表示为index为 i 的位置上 ...

  5. 053 Maximum Subarray 最大子序和

    给定一个序列(至少含有 1 个数),从该序列中寻找一个连续的子序列,使得子序列的和最大.例如,给定序列 [-2,1,-3,4,-1,2,1,-5,4],连续子序列 [4,-1,2,1] 的和最大,为 ...

  6. [LintCode] Maximum Subarray 最大子数组

    Given an array of integers, find a contiguous subarray which has the largest sum. Notice The subarra ...

  7. LEETCODE —— Maximum Subarray [一维DP]

    Maximum Subarray Find the contiguous subarray within an array (containing at least one number) which ...

  8. LeetCode: Maximum Subarray 解题报告

    Maximum Subarray Find the contiguous subarray within an array (containing at least one number) which ...

  9. [LeetCode]Maximum Subarray题解

    Maximum Subarray: Find the contiguous subarray within an array (containing at least one number) whic ...

随机推荐

  1. ruby字符串处理

    1. str="abc123"puts str[0].chr     =>  a puts str[0]           =>a的ascii码 2.中文字符串的正则 ...

  2. webpack 精华文章

    最近迁移 webpack1 到 webpack3 碰到了一些问题,还是通过一些文章,解决了问题.在这里做一个备份,方便以后使用. 从零搭建vue2+vue-router2+webpack3工程 Web ...

  3. JAVA 时间的使用

    今天老师又没有讲新课,不过讲了练习题,扩展了一下我们的思维. 今天就讲一下如何获取时间吧. 代码: import java.util.* public class Test{ public stati ...

  4. 本机运行x程序出现:Can't open display 原因及其解决方法(貌似非永久)

    http://blog.sina.com.cn/s/blog_53db572501016ma7.html 这是因为Xserver默认情况下不允许别的用户的图形程序的图形显示在当前屏幕上. 如果需要别的 ...

  5. Apache——DBUtils框架ResultSetHandler接口使用

    参考链接:http://i.cnblogs.com/EditPosts.aspx?opt=1 简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDB ...

  6. Django模板导入及母版继承和自定义返回Html片段

    1.ROOT_URLCONF = '总路由所在路径(比如untitled.urls)'<===默认情况是这样 根路由的路径是可以修改的:ROOT_URLCONF = app01.urls< ...

  7. Kafka-broker配置说明

    配置文件在config/server.properties 下面的一些配置可能是你需要进行修改的. broker.id 整数,建议根据ip区分 log.dirs kafka存放消息文件的路径, 默认/ ...

  8. 激活 IDEA, PyCharm

    1. 到网站 http://idea.lanyus.com/ 获取注册码. 2.填入下面的license server: http://intellij.mandroid.cn/ http://ide ...

  9. python:lambda、filter、map、reduce

    lambda 为关键字.filter,map,reduce为内置函数. lambda:实现python中单行最小函数. g = lambda x: x * 2 #相当于 def g(x): retur ...

  10. 【图文并茂】DEV配置NTL库

    一开始根据陈老师的博客:再说如何在DEV C++中搭建NTL库 后来发现自己虽然跟着一步一步来做,还是做错了很多回. 究竟怎么一回事呢?后来我发现一个致命的错误很容易忽视,所以我就重新写一篇博客. 来 ...