LeetCode解题报告 53. Maximum Subarray [medium]
来源:互联网 发布:贝叶斯网络分析软件 编辑:程序博客网 时间:2024/04/27 11:35
题目描述
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
Example: given the array [-2,1,-3,4,-1,2,1,-5,4]
,
the contiguous subarray [4,-1,2,1]
has the largest sum = 6
.
解题思路
简而言之一句话意思就是,寻找最大序列和的子序列。
最直接简单的思路肯定是不行的,时间复杂度过大。这里算法的分类是分治算法,对于分治我的思路大概是,将原数组从中点二分,那么最大子数列一定存在于左半部分数列,右半部分数列,或者横跨左右两半。需要分别计算三种分组中的最大子序列的和,并进行比较。将原序列不断一分为二,变成更小的序列,最后的子序列只剩一个元素,然后再一步步递推上去,就能找到最大的子序列。
想到分治算法的实现要用到递归,就想有没有更简单的实现方法,可以想到如果从左到右依次扫描一遍,时间复杂度只需O(n),那么实现的思路是,每扫描一个数后进行判断临时的前几个数字的数字和,如果和值是大于0的,那么说明这几个数对总的最大和是有贡献的,可以保留;如果小于0,则一定会减少最大和,也就是做出负贡献,那么就将这几个和为负数的都删去,给临时和重新赋值当前的这个数字。与此同时,记录每次的最大和,判断最大和和临时和哪个更大,因为有可能删去的那几个负数和之后,剩余的数字都是负数,并且比这个负数和更小,那么之前已经记录过的最大和仍然能显示最大和。
代码如下:
class Solution {public: int maxSubArray(vector<int>& nums) { int tempsum=nums[0]; int allmax=nums[0]; for (int i=1; i<nums.size(); i++) { if (tempsum<0) { tempsum=nums[i]; if (allmax>tempsum) { allmax=allmax; } else allmax=tempsum; //cout << tempsum << allmax << endl; } else if (tempsum>=0) { tempsum=tempsum+nums[i]; if (allmax>tempsum) { allmax=allmax; } else allmax=tempsum; //cout << tempsum << allmax << endl; } } return allmax; }};
0 0
- LeetCode解题报告 53. Maximum Subarray [medium]
- [leetcode] 53. Maximum Subarray 解题报告
- leetcode解题报告:53. Maximum Subarray
- [Leetcode] 53. Maximum Subarray 解题报告
- 【LeetCode】53.Maximum Subarray解题报告
- [LeetCode] Maximum Subarray 解题报告
- 【LeetCode】Maximum Subarray 解题报告
- 【LeetCode】53. Maximum Subarray (Medium)
- (Leetcode)53. Maximum Subarray(medium)
- Leetcode #53. Maximum Subarray 最大区间和 解题报告
- LeetCode Maximum Product Subarray 解题报告
- LeetCode 解题报告 Maximum Product Subarray
- [leetcode] 152. Maximum Product Subarray 解题报告
- LeetCode 152. Maximum Product Subarray 解题报告
- Leetcode 53-Maximum Subarray 解题报告
- Leetcode 53. Maximum Subarray (Medium) (cpp)
- Leetcode 53. Maximum Subarray (Medium) (java)
- Maximum Subarray 解题报告
- v2.7.3版本去版权完全版
- 这些日子的总结
- Mac OS X安装gnu-sed等命令行工具
- lightoj-1122-Digit Count【DP】
- 洛谷 P1030 求先序排列
- LeetCode解题报告 53. Maximum Subarray [medium]
- Retrofit实现持久化Cookie的三种方案
- Javascript(es2016) import和require用法和区别
- 每次推荐一个----Android Studio中的几个比较重要的快捷键ctrl+shift+i
- 某公司月饼事件说开去
- 分治算法
- 杭电 2011
- HONOR-MILTER 荣耀邮件内容过滤系统
- LeetCode_21