LeetCode-P53题解【动态规划】
本文为原创,转载请注明:http://www.cnblogs.com/kylewilson/
题目出处:
https://leetcode.com/problems/maximum-subarray/description
题目描述:
找出连续子区间最大和,至少包含一个数
例如:[-2,1,-3,4,-1,2,1,-5,4],则子区间[4,-1,2,1]有最大和为6
输入:
[-2,1,-3,4,-1,2,1,-5,4]
思路分析:

解法一:
如上图P1.1:
最优解一定为一段连续的区间,则可以有O(n*n)的解法,即遍历所有的区间找出最大值
设sum[i]为区间[1,i]的和,初始化处理
最优解=max(sum[i]-sum[j]), (0<=i,j<n)
解法二:
假设最大区间和为上图红色区域,可以看出,点i一定是该区间最右边节点;

图P1.2
设f[i]为以i结尾的最大连续区间和
为什么一定要以i结尾?
因为f[i]为一维数组,不加这个条件,则f[i]无法表示出前面的状态,只知道前i个节点的最优解,但不知道最优解从哪里开始
如果已经求出i个节点的最大区间和,则增加一个节点i+1时,前i+1个节点的最优解只有两种情况
1)i+1不在最优解区间中,这种情况和只有i个节点是一样的
2)i+1在最优解区间中, 这和情况i+1一定是最优解的最右边节点,又分两种情况
2-1) 前i个节点的最优解为负数,则舍弃前面的和,因为加上前面的和会更小
f[i+1]=f[i]+line[i+1]
2-2) 前i个节点的最优解为正数,则加上前面的和,因为加上前面的和会更大
f[i+1]=line[i+1]
最优解=max(f[i]), (0<=i<n)
注:每一个节点i只与之前的一个节点i-1相关,所以用滚动变量,空间复杂度为O(1)
C++源码如下:
github: https://github.com/Kyle-Wilson1/Leetcode/tree/master/P53
class Solution {
public:
    Solution() = default;
    static int maxOfTwo(int a, int b) {
        return a > b ? a : b;
    }
    int maxSubArray(vector<int> &nums) {
        int pre = 0, now = 0, maxAnswer = -2147483647;
        for (int num : nums) {
            if (pre > 0)
                now = pre + num;
            else
                now = num;
            maxAnswer = maxOfTwo(maxAnswer, now);
            pre = now;
        }
        return maxAnswer;
    }
};
LeetCode-P53题解【动态规划】的更多相关文章
- LeetCode OJ 题解
		
博客搬至blog.csgrandeur.com,cnblogs不再更新. 新的题解会更新在新博客:http://blog.csgrandeur.com/2014/01/15/LeetCode-OJ-S ...
 - LeetCode总结 -- 一维动态规划篇
		
这篇文章的主题是动态规划, 主要介绍LeetCode中一维动态规划的题目, 列表如下: Climbing StairsDecode WaysUnique Binary Search TreesMaxi ...
 - Leetcode 简略题解 - 共567题
		
Leetcode 简略题解 - 共567题 写在开头:我作为一个老实人,一向非常反感骗赞.收智商税两种行为.前几天看到不止两三位用户说自己辛苦写了干货,结果收藏数是点赞数的三倍有余,感觉自己的 ...
 - LeetCode初级算法--动态规划01:爬楼梯
		
LeetCode初级算法--动态规划01:爬楼梯 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...
 - LeetCode 算法题解 js 版 (001 Two Sum)
		
LeetCode 算法题解 js 版 (001 Two Sum) 两数之和 https://leetcode.com/problems/two-sum/submissions/ https://lee ...
 - [LeetCode]Longest Palindromic Substring题解(动态规划)
		
Longest Palindromic Substring: Given a string s, find the longest palindromic substring in s. You ma ...
 - leetcode & lintcode 题解
		
刷题备忘录,for bug-free 招行面试题--求无序数组最长连续序列的长度,这里连续指的是值连续--间隔为1,并不是数值的位置连续 问题: 给出一个未排序的整数数组,找出最长的连续元素序列的长度 ...
 - LeetCode一句话题解
		
深度优先搜索 人生经验 1. 需要输出所有解.并由于元素集有重复元素,要求返回的结果需要去重的情况,可考虑使用值对应数量的map,然后分别考虑依次取不同数量该值的可能. LeetCode39 题目:给 ...
 - [leetcode] 位操作题解
		
子集 题目[78]:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [ ...
 - LeetCode 中等题解(1)
		
16 最接近的三数之和 Question 给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和. ...
 
随机推荐
- react第一单元(简介)
			
第一单元(react简介) 课程目标 理解react这个框架在前端开发中的地位 理解react诞生的原因和意义(react是一个用于快速构建前端视图的javaScript库) 理解什么是虚拟dom.原 ...
 - Spark性能调优篇六之调节数据本地化等待时长
			
数据本地化等待时长调节的优化 在项目该如何使用? 通过 spark.locality.wait 参数进行设置,默认为3s,6s,10s. 项目中代码展示: new SparkConf().set(&q ...
 - writeup | 你知道php的备份文件吗
			
题目地址:https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5064 转载请注明出处作者 ...
 - Erlang那些事儿之正儿八经的前言
			
说在前面,为啥要码这些,并不是因为喜欢它,恰恰相反,我非常讨厌Erlang(真香警告)这位二郎神(Erlang的谐音),讨厌它的语法,讨厌它不变的变量,讨厌它的一切. 曾经的我,一听到这个语言,我就打 ...
 - 物联网打工人必备:LiteOS Studio图形化调测能力
			
摘要:本文会给大家介绍下LiteOS Studio的调测的几个知识点,包括: 调测配置,监视变量,反汇编代码同步展示,数值进制切换,跨平台编译调测,Qemu模拟器调测,多核调测,远程设备调测等. 掌握 ...
 - VS2019开启调试,测试图片上传的时候,一点到图片上传,直接导致VS调试崩掉,返回 程序“[14764] iisexpress.exe”已退出,返回值为 -1 (0xffffffff)。 是什么原因导致的?
			
试着使用管理员身份运行vs 今天调试的时候遇到个奇葩问题 一点上传控件选择文件后 就终止调试 发现根源不在上传控件 而是本地的中文输入法!关掉vs自动终止调试设置就好了 工具->选项-> ...
 - Core3.0使用Swagger接口文档
			
前言 此方法为百度搜索结果,原文链接找不到了 步骤 1.引用Nuget Swashbuckle.AspNetCore 2.Startup.cs配置 //注册swagger服务,定义1个或者多个swag ...
 - spark 系列之一 RDD的使用
			
spark中常用的两种数据类型,一个是RDD,一个是DataFrame,本篇主要介绍RDD的一些应用场景见代码本代码的应用场景是在spark本地调试(windows环境) /** * 创建 spark ...
 - 自己总结的关于图论的一些算法实现(C语言实现,有较详细注释,800行左右)
			
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define TRUE 1 5 # ...
 - Git 是如何存储文件的
			
01.存储方式 Git 从核心上来看不过是简单地存储键值对(key-value).它允许插入任意类型的内容,并会返回一个键值,通过该键值可以在任何时候再取出该内容. Git 存储数据内容的方式,为每份 ...