輸入一個整形數組,數組裏有正數也有負數。
數組中連續的一個或多個整數組成一個子數組,每一個子數組都有一個和。
求全部子數組的和的最大值。要求時間複雜度爲O(n)。ios
例如輸入的數組爲1, -2, 3, 10, -4, 7, 2, -5,和最大的子數組爲3, 10, -4, 7, 2,
所以輸出爲該子數組的和18。數組
#include<stdio.h> #include <iostream> using namespace std ; int maxSum(int* a, int n) { int sum=0; int b=0; for(int i=0; i<n; i++) { if(b<0) b=a[i]; else b+=a[i]; if(sum<b) sum=b; } return sum; } int main() { int a[10]={1,-8,6,3,-1,5,7,-2,0,1}; cout<<maxSum(a,10)<<endl; getchar(); return 0; }