Given an integer array nums
, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
Example:
Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.
Follow up:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
题目大意:
找出输入序列中相加sum为最大的子序列。
解题思路:
我们需要知道在计算sum最大时,只有正数对最终的答案有贡献。
如果我们知道当前寻找到的某一个子序列的sum是一个负数,则这一部分对包含这一个子序列的结果并不是最大值。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
if (nums.size() == 0) return 0;
int cur_max = nums[0];
int cur_sum = max(0, nums[0]);
for (int i = 1; i < nums.size(); ++i) {
cur_sum = cur_sum + nums[i];
cur_max = max(cur_max, cur_sum);
cur_sum = max(0, cur_sum);
}
return cur_max;
}
};