1 两次遍历 寻找最大和
2 贪心思想,sum为负数,sum为当前值, sum大于0,为sum加当前值; 如果全为负数,找到最大的一个负数
//连续子数组的最大和
int FindGreatSum(vector<int> array) {
if (array.size() == 0) {
return 0;
}
int sum = 0 , maxsum = 0;
for (int i = 0; i < array.size(); i++) {
sum = 0;//每次一开始重置0
for(int j = i; j < array.size(); j++) {
sum = sum + array[j];
if (sum > maxsum) {
maxsum = sum;
cout << maxsum << endl;
}
}
}
return maxsum;
}
//贪心思想
int FindGreatSum2(vector<int> array) {
if (array.size() == 0) {
return 0;
}
int sum = 0, maxsum = -100, maxnum = -10000;
for (int i = 0; i < array.size(); i++) {
if (sum <= 0) {
sum = array[i];//和小于0,和就为当前数
}
else {
sum = sum + array[i];//大于0,加上当前数
}
if (sum > maxsum) {
maxsum = sum;
}
if (array[i] > maxnum) { // 全负数情况
maxnum = array[i];
}
}
return (maxnum < 0 ) ? maxnum : maxsum;
}