https://leetcode.com/problems/maximum-subarray/
题目原意是给定一个序列,找出和最大的连续子序列。如:[-2,1,-3,4,-1,2,1,-5,4],最大子序列是[4,-1,2,1],返回最大和是6。
经典的动态规划问题,在没有思路前一直在用贪心算法的思路,后来看了别人的博客才发现思路不对,应该用动态规划来做。这道题代码很简单,但是思路却没那么简单。 一个重要的思路是: 假设[i,j] 为最大子序列,那么对任意的k, i
int maxSubarray(vector<int> vec){
if(vec.size() == 0) return 0;
int localmax = vec[0];
int allmax = vec[0];
for(int i =1; i<vec.size(); i++){
localmax = max(vec[i] , localmax + vec[i]); //假如vec[i] 大于 localmax + vec[i] ,说明localmax为负数,应舍弃。
allmax = max(localmax, allmax); //比较全局最大值和局部最大值
}
return allmax;
}
后续会给出其他解法。