Maximum Subarray
问题描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
问题解决:假设cur为数组中以a[i-1]结尾的当前最大字段和,sum为数组中已知的最大字段和,当搜索到数组中最后一个元素时,便可以知道数组的最大字段和。这也是典型的动态规划问题。
动态规划的主要思想就是把大问题划分为小问题,通过求解小问题来逐渐解决大问题。
满足动态规划思想的问题具备两个典型特征:
- 最优子结构:就是说局部的最优解能够决定全局的最优解,最优解的子问题也是最优的。
- 子问题重叠 :就是说大问题划分为小问题时,并不是每次都是新问题,有的小问题可能已经在前面的计算中出现过。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
if(nums.size()==0) return 0;
int sum=nums[0],cur=nums[0];
for(int i=1;i<nums.size();i++)
{
cur=max(cur+nums[i],nums[i]);
sum=max(cur,sum);
}
return sum;
}
};
beats 100.00 % of cpp submissions.