[Leetcode]Maximum Subarray
来源:互联网 发布:电脑图片编辑软件 编辑:程序博客网 时间:2024/05/21 09:27
Find 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
.
class Solution {public: /*algorithm divide and conquer A[1..n] can divide to A[1..i-1] A[i] A[i+1..n] f(1..n) = max(f(1..i-1),f(i+1...n),union(f(1..i-1)+A[i]+f(i+1..n)) time O(nlogn) space O(nlogn) */ //[start,end) int maxSubArrayHelper(vector<int>&nums,int start,int end) { if((end - start) < 1)return INT_MIN; if((end-start) < 2)return nums[start]; int mid = start + (end-start)/2; int left = maxSubArrayHelper(nums,start,mid); int right = maxSubArrayHelper(nums,mid+1,end); int lsum = 0,lsmax=0; for(int k=mid-1;k >= start;k--){ lsum += nums[k]; lsmax = max(lsmax,lsum); } int rsum = 0,rsmax=0; for(int k=mid+1;k < end;k++){ rsum += nums[k]; rsmax = max(rsum,rsmax); } return max(max(left,right),lsmax+nums[mid]+rsmax); } int maxSubArray(vector<int>& nums) { return maxSubArrayHelper(nums,0,nums.size()); }};
class Solution {public: /*algorithm dp solution for array,A[1...n] f(1)=A[1]; f(2)=max(f(1) + A[2],A[2]) f(n) = max(f(n-1) + A[n],A[n]) time O(n) space O(1) */ int maxSubArray(vector<int>& nums) { int n = nums.size(); int gmax = nums[0]; int f0 = nums[0],f1; for(int i = 1;i < n;i++){ f1 = max(f0+nums[i],nums[i]); f0 = f1; gmax = max(gmax,f0); } return gmax; }};
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
- Android的Handler总结
- hdu5464Clarke and problem
- git 【基本概念】
- java 连接数据库mysql的语句怎么写
- Java虚拟机调优工具 jstack
- [Leetcode]Maximum Subarray
- boost的安装和使用
- 全面讲解Tomcat下SSL证书的配置(一)
- 在任务计划时无法设置账户信息的解决方法
- test5.15
- Mysql 5.5 主从复制
- Cocos2d-x 3.x 异步加载资源和Loading界面
- display:none与visibility:hidden的区别是什么
- 仿Android5.0 Heads-Up风格的Toast提示