LeetCode || Maximum Subarray
来源:互联网 发布:网络诈骗 编辑:程序博客网 时间:2024/06/05 21:49
Maximum Subarray
Total Accepted: 12325 Total Submissions: 37953My SubmissionsFind the contiguous subarray within an array (containing at least one number) which has the largest sum.
For 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
.
click to show more practice.
class Solution {public: int maxSubArray(int A[], int n) { int sum=A[0], cur_sum=INT_MIN; for(int i=0; i<n; ++i){ if(cur_sum<0) cur_sum=A[i]; else cur_sum+=A[i]; if(sum<cur_sum) sum=cur_sum; } return sum; }};
注意:sum=A[0] 是为了避免A中只有一个元素的情况,cur_sum的初始值应该为 int_min,防止 sum<cur_sum 在不该成立时成立。
题目最后提到了分治法解决会很巧妙,于是在Discuss里看到某大神的分治法讲解。思路如下:
1、单独写一个计算函数,首先计算middle索引,递归调用本函数计算(left,middle-1)和(middle+1,right);
2、针对middle处的元素,一共有两种情况:最终的sum不包含它/包含它。
3、从middle开始,向left方向走,计算出此方向上的最大和;然后从middle向right方向走,计算出最大和;将二者加和就是包含middle值的最大和;
4、比较包含middle的最大和与1中计算出的middle左侧、右侧最大和,返回其中的最大值即可。
复杂度:T(n)=2T(n/2)+n, 为O(n*lgn)。不如 O(n)的快。
0 0
- 【LeetCode】Maximum Subarray 和 Maximum Product Subarray
- LeetCode: Maximum Subarray
- LeetCode Maximum Subarray
- [Leetcode] Maximum Subarray
- LeetCode: Maximum Subarray
- leetcode 25: Maximum Subarray
- [LeetCode] Maximum Subarray
- [Leetcode] Maximum Subarray
- [LeetCode]Maximum Subarray
- [leetcode]Maximum Subarray
- LeetCode-Maximum Subarray
- [leetcode] Maximum Subarray
- LeetCode 45: Maximum Subarray
- LeetCode - Maximum Subarray
- LeetCode:Maximum Subarray
- LeetCode 53: Maximum Subarray
- 【leetcode】Maximum Subarray
- Leetcode Maximum Subarray
- 一个和spring整合的依赖注入的servlet,子类可自动装配依赖Bean
- 每日一编C-6
- MSSQL与UNIX时间戳
- JAVA开发者最常去的20个英文网站
- Python编写的DHT的搜索引擎(测试)
- LeetCode || Maximum Subarray
- 北邮新OJ95
- 在deepin下安装manual文档
- android中string.xml中%1$s、%1$d等的用法
- LeetCode || Remove Element
- LeetCode || Integer to Roman
- MySQL远程访问权限,允许远程连接的开启
- sgddruh
- 李开复:算法的力量