题目:
Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
思路:
很简单。如果前面几个连续元素sum为负数,则后面元素加上它必然会更小,所以此时应该放弃加上前面几个连续元素之和,应该现在开始重新累加。
代码实现:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
if (nums.size() <= 0){
return 0;
}
int ans = nums[0];
int i = 1;
int sum = nums[0];
while (i < nums.size()){
if (sum > 0){
sum += nums[i];
}else{
sum = nums[i];
}
if (sum > ans){
ans = sum;
}
++i;
}
return ans;
}
};
discuss:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n = nums.size();
vector<int> dp(nums.size()); // dp[i]表示以A[i]为结尾了最大子串
dp[0] = nums[0];
int max_sum = dp[0];
for (int i = 1; i < n; ++i){
dp[i] = nums[i] + (dp[i - 1] > 0 ? dp[i - 1] : 0);
max_sum = max(max_sum, dp[i]);
}
return max_sum;
}
};