思路:
如果当前位置之前“累加子数组”的和小于等于0,则抛弃当前位置之前的“累加子数组”的和,从当前元素开始重新累加。
即:
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
int find(vector<int>array)
{
if (array.empty())
return 0;
int maxsum = array[0];//初始化
int currsum = array[0];//初始化
for (int i = 1; i < array.size(); i++)
{
if (currsum <= 0)//如果当前位置之前“累加子数组”的和小于等于0,则抛弃当前位置之前的“累加子数组”的和,从当前元素开始重新累加
currsum = array[i];
else
currsum += array[i];
if (currsum > maxsum)
maxsum = currsum;
}
return maxsum;
}
};
int main() {
Solution solution;
vector<int>a = { 1,-2,3,10,-4,7,2,-5 };
int maxsum = solution.find(a);
cout << "maxsum:" << maxsum << endl;
system("pause");
return 0;
}