#include <iostream>
using namespace std;
bool isValid = true;
int FindGreatestSumOfSubArray(int *data, int length) {
isValid = true;
if (data == NULL || length == 0) {
isValid = false;
return 0;
}
int i = 0;
//int类型表示的最小值为min = 1 << (8 * sizeof(int) - 1),即是-2E(8 * int所占字节数 - 1),而最大值max = -(min + 1),
// sum = {data[i], if(i==0) || sum(i -1) <= 0
// sum(i - 1) + data[i], if(sum(i - 1) > 0
int currentSum = data[0];
int greatestSum = data[0];
for(i = 1; i < length; i++) {
if (currentSum > 0) {
currentSum = currentSum + data[i];
} else {
currentSum = data[i];
}
if (currentSum > greatestSum){
greatestSum = currentSum;
}
}
return greatestSum;
}
int main(){
int array[8] = {1, -2, 3, 10, -4, 7, 2, -5};
int array1[8] = {-1, -2, -3, -10, -4, -7, -2, -5};
int *array2 = NULL;
cout<<"greatestSum = "<<FindGreatestSumOfSubArray(array, 8);//输出18
cout<<" isValid "<<isValid<<endl;//
cout<<"greatestSum = "<<FindGreatestSumOfSubArray(array1, 8);//输出-1
cout<<" isValid "<<isValid<<endl;//
cout<<"greatestSum = "<<FindGreatestSumOfSubArray(array2, 8);//输出0,array2为NULL,无效,isValid为0
cout<<" isValid "<<isValid<<endl;//
cout<<"greatestSum = "<<FindGreatestSumOfSubArray(array1, 0);//输出0,length为0,无效,isValid为0
cout<<" isValid "<<isValid<<endl;//
return 1;
}
031_连续子数组的最大和
最新推荐文章于 2021-12-23 13:06:47 发布