Leetcode每日一题:53.maximum-subarray(最大子序和)
虽然是简单题,但思路还是挺巧妙地:
非递归实现
假设当前进行到 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(最大子序和)相关推荐
- leetcode python3 简单题53. Maximum Subarray
1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第五十三题 (1)题目 英文: Given an integer array num ...
- 【动态规划】LeetCode 53. Maximum Subarray
LeetCode 53. Maximum Subarray 原题描述(求子序列最大和/最大子串):Find the contiguous subarray within an array (conta ...
- 【DP】LeetCode 53. Maximum Subarray
LeetCode 53. Maximum Subarray Solution1:我的答案 动态规划 class Solution { public:int maxSubArray(vector< ...
- [Lintcode]41. Maximum Subarray/[Leetcode]53. Maximum Subarray
41. Maximum Subarray/53. Maximum Subarray 本题难度: Eas Topic: Dynamic Programming Description Given an ...
- leetcode每日刷题计划-简单篇day8
leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...
- 53.Maximum Subarray
/** 53.Maximum Subarray * 2016-5-7 by Mingyang * 如果我们从头遍历这个数组.对于数组中的其中一个元素,它只有两个选择: 1.* 要么加入之前的数组加和之 ...
- Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)
思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...
- 【LeetCode每日一题】1723. 完成所有工作的最短时间
[LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...
- leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用
leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...
最新文章
- Flask实战2问答平台-发布问答功能完成
- 谁说双非本科就一定无缘阿里?H哥粉丝刚刚6面通过,喜得Offer!
- 二线制和四线制传感器的区别_三相四线制和三相五线制的解析,不少人都理解错了...
- 光流 | 基于光流的人体异常行为检测(附源代码)
- xml 文件解析 pull
- DOM(document object model),文档对象模型
- 【原创】SqlServer 2005 BCP命令详解
- java迭代器逆序_迭代器
- web 服务器和 web 技术发展历史简介
- C#:解决WCF中服务引用 自动生成代码不全的问题。
- Nervos DAO锁定总额突破100亿,近日解锁的14.28亿生态基金已被全部存入
- FTP:226 transfer done but failed to open directory
- 20HZ信号发生器电路图
- 常见的保险产品类别-年金保险、意外险
- 利用触发器生成三分频
- 如何快速提升网站关键词排名?
- Asp.net C#制作PDF文件全攻略
- heic格式的图片h5显示
- 目瞪狗呆:出轨率最高的竟是IT男
- chevkv基于成对ANI的快速基因组聚类