参考了一个算法,链接如下:
http://blog.csdn.net/joylnwang/article/details/6859677
然而算法只看懂了第一部分,最大字串假设是[i,j]那么i<k<j,[i,k]数据的和是一个正数
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int length = nums.size();
if(length==0) return 0;
if(length==1) return nums[0];
int add = 0;
int max = -2147483648;
for(int i=0; i<length; i++)
{
add += nums[i];
if(add>max)
max = add;
if(add<0)
add = 0;
}
return max;
}
};
最开始写的时候没有考虑到全是负数的情况,将add和max的判断放在了
if(add<0) add = 0;
else
if(add > max) max = add;如果序列全部是负数,应该找一个最小的负数作为返回值,所以放在else中是不完善的