Maximum Subarray
题目描述
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.
难度:Easy
题目大意:在数组中找到连续的子序列(至少包含一个数字),其和最大。 例如,给定阵列[-2,1,-3,4,1,2,1,-5,4], 连续的子阵列[4,1,2,1]具有最大的和 6。
解题思路
用动态规划解题:
记录当前的序列的和sum
记录前面连续的序列的和的最大值maxSum;
通过比较下一个数与之前的sum的和与下一个数的大小确定是否重新定义sum;
通过比较当前的sum与之前的maxSum的大小来确定目前连续序列的最大值。
复杂度O(n)
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int maxSum = nums[0];
int sum = nums[0];
for (int i = 1; i < nums.size(); i++) {
sum = max(nums[i], sum + nums[i]);
maxSum = max(sum, maxSum);
}
return maxSum;
}
};