[Leetcode] Maximum Subarray
来源:互联网 发布:阿里云dns教程 编辑:程序博客网 时间:2024/06/05 03:24
描述
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.
More practice:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
找出数组中和最大的子数组,返回最大值。
分析1
很容易想到动态规划的方法解决这道题。我们令
递推公式是:
代码1
class Solution {public: int maxSubArray(vector<int>& nums) { if (nums.empty()) return INT_MIN; vector<int> dp(nums.size(), 0); dp[0] = nums[0]; int res = dp[0]; for (int i = 1; i < nums.size(); i++) { dp[i] = max(nums[i], nums[i] + dp[i - 1]); if (res < dp[i]) res = dp[i]; } return res; }};
分析2
还有一种分而治之的思路,数组
1. 属于左半部分
2. 属于左半部分
3. 包含
对于前两种情况,可以直接递归求解,对于第三种情况,可以将子数组分成三部分
代码2
class Solution {public: int maxSubArray(vector<int>& nums) { int res = INT_MIN; return maxArray(nums, 0, nums.size() - 1, res); } int maxArray(vector<int>& nums, int lo, int hi, int& res){ if (lo > hi) return INT_MIN; int mid = lo + (hi - lo) / 2; int lmax = maxArray(nums, lo, mid - 1, res); int rmax = maxArray(nums, mid + 1, hi, res); res = max(max(lmax, rmax), res); int sum = 0, mlmax = 0, mrmax = 0; for (int i = mid - 1; i >= lo; i--) { sum += nums[i]; if (sum > mlmax) mlmax = sum; } sum = 0; for (int i = mid + 1; i <= hi; i++) { sum += nums[i]; if (sum > mrmax) mrmax = sum; } res = max(res, mlmax + mrmax + nums[mid]); return res; }};
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
- 45-超越 goto 的跳转 longjmp
- Monkey测试命令及其说明附中止monkey测试方法
- IO 简单登录程序
- static
- JS/JQ 宽高的理解和应用--慕课
- [Leetcode] Maximum Subarray
- Centos日志及管理
- iOS 工作之余小总结(四)--(3) NSDate 时间类
- java变量默认值
- sqlserver将一个表中的数据存储到另一个表中
- 地球坐标,火星坐标,百度坐标理解与转换
- Android TextView 跑马灯
- java通过名称获取实体bean
- ppp完全理解(一)