虽然是简单题,但思路还是挺巧妙地:

非递归实现
假设当前进行到 nums[cur],若前面地和为sum ,执行sum=sum+nums[cur] 小于0,将sum与sunMax比较,然后将sum置0,为什么要置0?因为前面的已经是负数了,-1 + a(a为任何数)肯定是小于a的,所以我们直接从下一个数(cur+1)开始;
如果sum>0,直接与sumMax比较即可;
时间复杂度O(n),空间复杂度常数

递归实现
递归实现比较容易理解,但是效率不及非递归;
f(n)=max(f(n-1)+nums[cur],nums[cur]);
思路是一样的,把nums[cur]加入到前面的和序列中 或者 不加入(那么新的序列就从cur开始)

动态规划
f(n)=max(f(n-1)+nums[cur],nums[cur]);

C++
非递归实现:


int maxSubArray(vector<int> &nums)
{int len = nums.size();if (len == 0)return 0;int sum = 0, maxSum = nums[0];for (int i = 0; i < len; i++){sum += nums[i];if (sum > maxSum)maxSum = sum;if (sum < 0){sum = 0;}}return maxSum;
}

递归实现
超时

int fun(vector<int> nums, int &sumMax, int cur)
{if (cur == -1){return 0;}int sum = max(fun(nums, sumMax, cur - 1) + nums[cur], nums[cur]);if (sum > sumMax)sumMax = sum;return sum;
}int maxSubArray(vector<int> &nums)
{int sumMax = nums[0];fun(nums, sumMax, nums.size() - 1);return sumMax;
}

动态规划:

class Solution {public:int maxSubArray(vector<int>& nums) {int sum = 0, sumMax = nums[0];for (int x:nums) {sum = max(sum + x, x);sumMax = max(sumMax, sum);}return sumMax;}
};

Leetcode每日一题:53.maximum-subarray(最大子序和)相关推荐

  1. leetcode python3 简单题53. Maximum Subarray

    1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第五十三题 (1)题目 英文: Given an integer array num ...

  2. 【动态规划】LeetCode 53. Maximum Subarray

    LeetCode 53. Maximum Subarray 原题描述(求子序列最大和/最大子串):Find the contiguous subarray within an array (conta ...

  3. 【DP】LeetCode 53. Maximum Subarray

    LeetCode 53. Maximum Subarray Solution1:我的答案 动态规划 class Solution { public:int maxSubArray(vector< ...

  4. [Lintcode]41. Maximum Subarray/[Leetcode]53. Maximum Subarray

    41. Maximum Subarray/53. Maximum Subarray 本题难度: Eas Topic: Dynamic Programming Description Given an ...

  5. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

  6. 53.Maximum Subarray

    /** 53.Maximum Subarray * 2016-5-7 by Mingyang * 如果我们从头遍历这个数组.对于数组中的其中一个元素,它只有两个选择: 1.* 要么加入之前的数组加和之 ...

  7. Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)

    思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...

  8. 【LeetCode每日一题】1723. 完成所有工作的最短时间

    [LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...

  9. leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用

    leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...

最新文章

  1. Flask实战2问答平台-发布问答功能完成
  2. 谁说双非本科就一定无缘阿里?H哥粉丝刚刚6面通过,喜得Offer!
  3. 二线制和四线制传感器的区别_三相四线制和三相五线制的解析,不少人都理解错了...
  4. 光流 | 基于光流的人体异常行为检测(附源代码)
  5. xml 文件解析 pull
  6. DOM(document object model),文档对象模型
  7. 【原创】SqlServer 2005 BCP命令详解
  8. java迭代器逆序_迭代器
  9. web 服务器和 web 技术发展历史简介
  10. C#:解决WCF中服务引用 自动生成代码不全的问题。
  11. Nervos DAO锁定总额突破100亿,近日解锁的14.28亿生态基金已被全部存入
  12. FTP:226 transfer done but failed to open directory
  13. 20HZ信号发生器电路图
  14. 常见的保险产品类别-年金保险、意外险
  15. 利用触发器生成三分频
  16. 如何快速提升网站关键词排名?
  17. Asp.net C#制作PDF文件全攻略
  18. heic格式的图片h5显示
  19. 目瞪狗呆:出轨率最高的竟是IT男
  20. chevkv基于成对ANI的快速基因组聚类

热门文章

  1. [Python]Matplotlib绘图基础
  2. .NET/C#使用NPOI操作Excel
  3. vue.js慢速入门(1)
  4. Java进阶之网络编程
  5. MyEclipse从数据库反向生成实体类通过Hibernate的方式----mysql数据库实例
  6. 打印0-1之间double数字的二进制表示
  7. php+mysql+like+通配符+变量
  8. [转]MVC+JQuery validate实现用户输入验证
  9. php 数据处理--合并,拆分,追加,去重
  10. iOS 2x 3x