一. 题目: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
.
假设已知0, .., i
的最大和sum[i]
以后,则0, ..., i+1
的最大和sum[i+1]分为以下两种情况:
1)若sum[i]>=0
,则sum[i+1]=sum[i]+A[i+1]
。
2)若sum[i]<0
,另起一个SubArray,令sum[i+1]=A[i+1]
。在计算过程中,使用一个变量maxsum
用于存储sum
的最大值,一旦出现更大的sum
值则更新之,最后返回该变量即可。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int len = nums.size();
if(len<1){
return 0;
}
int sum[len];
sum[0]=nums[0];
int maxSum=nums[0];
for(int i=1; i<len; i++){
if(sum[i-1]>0){
sum[i]=nums[i]+sum[i-1];
}else{
sum[i]=nums[i];
}
maxSum = max(sum[i], maxSum);
}
return maxSum;
}
};
三. 总结
这种算法的空间复杂度为O(n),时间复杂度为O(n).