本文为原创,转载请注明: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题解【动态规划】的更多相关文章

  1. LeetCode OJ 题解

    博客搬至blog.csgrandeur.com,cnblogs不再更新. 新的题解会更新在新博客:http://blog.csgrandeur.com/2014/01/15/LeetCode-OJ-S ...

  2. LeetCode总结 -- 一维动态规划篇

    这篇文章的主题是动态规划, 主要介绍LeetCode中一维动态规划的题目, 列表如下: Climbing StairsDecode WaysUnique Binary Search TreesMaxi ...

  3. Leetcode 简略题解 - 共567题

    Leetcode 简略题解 - 共567题     写在开头:我作为一个老实人,一向非常反感骗赞.收智商税两种行为.前几天看到不止两三位用户说自己辛苦写了干货,结果收藏数是点赞数的三倍有余,感觉自己的 ...

  4. LeetCode初级算法--动态规划01:爬楼梯

    LeetCode初级算法--动态规划01:爬楼梯 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...

  5. LeetCode 算法题解 js 版 (001 Two Sum)

    LeetCode 算法题解 js 版 (001 Two Sum) 两数之和 https://leetcode.com/problems/two-sum/submissions/ https://lee ...

  6. [LeetCode]Longest Palindromic Substring题解(动态规划)

    Longest Palindromic Substring: Given a string s, find the longest palindromic substring in s. You ma ...

  7. leetcode & lintcode 题解

    刷题备忘录,for bug-free 招行面试题--求无序数组最长连续序列的长度,这里连续指的是值连续--间隔为1,并不是数值的位置连续 问题: 给出一个未排序的整数数组,找出最长的连续元素序列的长度 ...

  8. LeetCode一句话题解

    深度优先搜索 人生经验 1. 需要输出所有解.并由于元素集有重复元素,要求返回的结果需要去重的情况,可考虑使用值对应数量的map,然后分别考虑依次取不同数量该值的可能. LeetCode39 题目:给 ...

  9. [leetcode] 位操作题解

    子集 题目[78]:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 示例: 输入: nums = [1,2,3] 输出: [ [3],   [1],   [2],   [ ...

  10. LeetCode 中等题解(1)

    16 最接近的三数之和 Question 给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和. ...

随机推荐

  1. 精尽Spring MVC源码分析 - HandlerAdapter 组件(二)之 ServletInvocableHandlerMethod

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  2. react第十五单元(react路由的封装,以及路由数据的提取)

    第十五单元(react路由的封装,以及路由数据的提取) #课程目标 熟悉react路由组件及路由传参,封装路由组件能够处理路由表 对多级路由能够实现封装通用路由传递逻辑,实现多级路由的递归传参 对复杂 ...

  3. C语言中++*x和*++x的区别

    ++跟*的优先级一样,如果两个同时出现,运算是从右往左(不是常规的从左往右),所以: ++*x即++(*x),先取x的值,然后让值自加1:(地址没变,指针指向的值变了.搞不懂的话自己用快递做例子) * ...

  4. Networking from the container's point of view 笔记

    Networking from the container's point of view Published portsThe type of network a container uses, w ...

  5. 小白都能理解的Python多继承

    本文主要做科普用,在真实编程中不建议使用多重继承,或者少用多重继承,避免使代码难以理解. 方法解析顺序(MRO) 关于多重继承,比较重要的是它的方法解析顺序(可以理解为类的搜索顺序),即MRO.这个跟 ...

  6. JVM 经典垃圾收集器 —— CMS 收集器

    本文部分摘自<深入理解 Java 虚拟机第三版> 概述 CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器.由于大部分 Java 应用主要 ...

  7. Java学习_面向对象编程

    抽象类 一个class定义了方法,但没有具体执行代码,这个方法就是抽象方法,抽象方法用abstract修饰.因为抽象类本身被设计成只能用于被继承,因此,抽象类可以强迫子类实现其定义的抽象方法,否则编译 ...

  8. [leetcode]187. Repeated DNA Sequences寻找DNA中重复出现的子串

    很重要的一道题 题型适合在面试的时候考 位操作和哈希表结合 public List<String> findRepeatedDnaSequences(String s) { /* 寻找出现 ...

  9. 有关em的个人理解

    个人的感觉关键就是在那个font-size,  对于一开始没有设置font-size的可以默认那就是16px  后面的所有的基础都应该是在前面距离他最近的那个font-size的大小作为1em进行设置 ...

  10. Turtlebot3新手教程:OpenCR软件设置(shell)

    *本文针对如何利用脚本来更新固件进行讲解 具体步骤如下: burger的固件更新 $ export OPENCR_PORT=/dev/ttyACM0 $ export OPENCR_MODEL=bur ...