Maximum Subarray
2016-05-03 12:27
429 查看
Problem
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array
the contiguous subarray
DP 来做 O(n) 的复杂度是最好的,但是这个divide and conquer 解法也值得学习
class Solution {
int helper(const vector<int>& nums, int left, int right ) {
if(left > right) return 0;
int mid = (left + right)/2;
int leftRst = helper(nums, left, mid - 1);
int rightRst = helper(nums, mid + 1, right);
int leftSum = 0, curSum = 0;
for( int i = mid - 1; i >= 0; i-- ) {
curSum += nums[i];
leftSum = max( curSum, leftSum);
}
int rightSum = 0; curSum = 0;
for( int i = mid + 1; i <= right ; i++ ) {
curSum += nums[i];
rightSum = max( curSum, rightSum);
}
int crossRst = leftSum + rightSum + nums[mid];
int rst = max(leftRst, rightRst);
rst = max(rst, crossRst);
return rst;
}
public:
int maxSubArray(vector<int>& nums) {
return helper(nums, 0, nums.size() - 1);
}
};
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.
DP 来做 O(n) 的复杂度是最好的,但是这个divide and conquer 解法也值得学习
class Solution {
int helper(const vector<int>& nums, int left, int right ) {
if(left > right) return 0;
int mid = (left + right)/2;
int leftRst = helper(nums, left, mid - 1);
int rightRst = helper(nums, mid + 1, right);
int leftSum = 0, curSum = 0;
for( int i = mid - 1; i >= 0; i-- ) {
curSum += nums[i];
leftSum = max( curSum, leftSum);
}
int rightSum = 0; curSum = 0;
for( int i = mid + 1; i <= right ; i++ ) {
curSum += nums[i];
rightSum = max( curSum, rightSum);
}
int crossRst = leftSum + rightSum + nums[mid];
int rst = max(leftRst, rightRst);
rst = max(rst, crossRst);
return rst;
}
public:
int maxSubArray(vector<int>& nums) {
return helper(nums, 0, nums.size() - 1);
}
};
相关文章推荐
- divide and conquer in Date Structures and Algorithm Analysis in C
- [leetCode] Different Ways to Add Parentheses
- Leetcode#53||Maximum Subarray
- Leetcode#4||Median of Two Sorted Arrays
- Maximum Subarray
- Majority Element
- Maximum Subarray
- 【Leetcode】Combination Sum III #216
- Longest Common Prefix
- [leetcode] 287. Find the Duplicate Number
- [leetcode] 95. Unique Binary Search Trees II
- [leetcode] 312. Burst Balloons
- [leetcode] 53. Maximum Subarray
- [leetcode] 241. Different Ways to Add Parentheses
- [leetcode] 23. Merge k Sorted Lists
- Leetcode NO.278 First Bad Version
- 分治 Divide and Conquer 局部最小值 local optimal 棋盘问题
- 算法导论----VLSI芯片测试; n个手机中过半是好的,找出哪些是好手机
- 算法----中位数算法的妙用(更新中)
- [hihoCoder] 压缩字符串 解题报告