连续子数组的最大和

来源:互联网 发布:日本以外全部沉没 知乎 编辑:程序博客网 时间:2024/04/29 11:36

例子:当数组为{1,-2,3,10,-4,7,2,-5} 时,和最大的子数组为{3,10,-4,7,2},因此输出该子数组的和18。

思路:从头到尾逐个累加数组中的每一个数,初始为0,当走到某一个数字时,若前面的累加和小于0,这时说明若加上当前的值和值仍会小于当前值,因此就将当前的和重置为当前所指元素的值,一直走到尾数为止,若当前和值大于前面的和值就记录一下最大值。

代码:

#include <assert.h>#include <iostream>using namespace std;bool isInvalidInput = false;int ArrayGreatSum(int* arr,int length){if (arr == NULL || length <= 0){isInvalidInput = true;return 0;}isInvalidInput = false;int CurrentSum = 0;int GreatSum = 0x80000000;for (int i = 0; i < length; ++i){if (CurrentSum <= 0){CurrentSum = arr[i];}else{CurrentSum = CurrentSum + arr[i];}if (CurrentSum > GreatSum){GreatSum = CurrentSum;}}return GreatSum;}int main(){    int nlen;cout<<"input array elem number:";cin>>nlen;int* arr = new int[nlen];cout<<"input elem:"<<endl;for (int i = 0; i < nlen; ++i){cin>>arr[i];}int greatsum = ArrayGreatSum(arr,nlen);if (isInvalidInput){cout<<"invalid input!"<<endl;}else{cout<<"array great sum:"<<greatsum<<endl;}delete[] arr;arr = NULL;}

0 0