1.暴力解法 O(n^3)
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
int sum = 0;
int max = array[0];
int len = array.size();
for(int i = 0 ;i < len;i++){
for(int j = i; j < len;j++){
sum = 0;
for(int k = i;k <= j;k++){
sum += array[k];
}
if(sum > max) {
max = sum;
}
}
}
return max;
}
};
2.改进 O(n^2)
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
int sum = 0;
int max = array[0];
int len = array.size();
for(int i = 0 ;i < len;i++){
sum = 0;
for(int j = i; j < len;j++){
sum += array[j]; //每次根据前一次的序列计算新序列
if(sum > max) {
max = sum;
}
}
}
return max;
}
};
3.扫描法
加上正数,和增加;负数,抛弃,赋下一个值
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
int sum = array[0];
int current = array[0];
int len = array.size();
for(int i = 1 ;i < len;i++){
if(current < 0)
current = array[i];//小于0的数,摄取,换成下一个数字
else
current += array[i];//有正面影响
if(current > sum)
sum = current; //current是当前和
}
return sum;
}
};