题目描述:
给定一个整数数组,找出总和最大的连续数列,并返回总和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
进阶:
如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。
c++代码:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n=nums.size();
if(n==1)return nums[0];
int dp[n+1];//dp[i]表示从0到第i位置为止,最大的连续数之和
dp[0]=nums[0];
int maxs=dp[0];
for(int i=1;i<n;i++){
dp[i]=max(dp[i-1]+nums[i],nums[i]);//若之前之和加上当前的数,比当签数本身小,说明应该从当前数开始向后找更大的连续和
if(dp[i]>maxs)maxs=dp[i];
}
return maxs; //返回这个过程中其中最大的一个最大连续和
}
};