LeetCode 0053
来源:互联网 发布:知乎俄罗斯航空发动机 编辑:程序博客网 时间:2024/05/19 22:02
53.Maximum Subarray
原题链接
我的思路:
如果说,一个数组中的数都是负数或0。由于题目中说到,这个子序列至少包含一个数字。那么这时候,如果最大的子序列就是这个数列中最大的数。
如果这个数组是有正数也有负数的,那么就需要认真考虑一下了。先从只有一个数的情况开始考虑,此时不需要想,直接返回这个数就好了。如果有两个数,此时你显然会想着暴力枚举,因为就三种情况。那我们就把数字再加一个,变成
我先给出动态规划的状态转移方程,之后再解释:
由于后面一定存在一个子序列,使得子序列和为正数,那么我就枚举以每个
我的代码:
class Solution {public: int maxSubArray(vector<int>& nums) { auto max_num_ptr = max_element(nums.begin(), nums.end()); int max_num = *(max_num_ptr); if(max_num < 0 ) { return max_num; } int len = nums.size(); vector<int> dp(len, 0); dp[0] = max(nums[0], 0); for(int i = 1; i < len; i++) { dp[i] = max(dp[i-1] + nums[i], 0); } auto max_sum_ptr = max_element(dp.begin(), dp.end()); return *max_sum_ptr; }};
最快速度的代码:
class Solution {public: int maxSubArray(vector<int>& nums) { int maxSum = 0; int res; int currSum =0; int maximum = nums[0]; for(int i=0;i<nums.size();i++) { currSum += nums[i]; maximum = max(maximum, nums[i]); if(currSum<0) currSum=0; if(maxSum < currSum) { maxSum = currSum; } } if(maxSum == 0) { return maximum; } return maxSum; }};
应该说最快速度的代码,是比较符合我讲的思路的。
- LeetCode 0053
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- 订单可视化2实战-生产交付流程(流程再造核心区)
- 介绍一种适合多人共同开发的模式
- C语言命令行参数
- HTML5与JQuery炫酷经典实例
- 字符匹配kmp算法
- LeetCode 0053
- 将 Apache Shiro 改造成 JWT 认证方式
- python实现自动输出文字小demo(cmd下)
- 2122 数据结构实验之链表七:单链表中重复元素的删除
- java中的AES 256算法遇到 Illegal key size or default parameters错的解决办法
- !可以防止鼠标单击移动 标签 特别是动态生产的元素标签
- PAT 甲级 1048. Find Coins (25)
- 51Nod 1183 编辑距离 (DP
- Mac下配置sublime实现LaTeX