求子数组的最大和

来源:互联网 发布:自己动手写网络爬虫pdf 编辑:程序博客网 时间:2024/05/16 18:18

题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值以及子数组的上下边界。要求时间复杂度为O(n)。

自己写的代码如下:

#include <iostream.h>#define ARR_SIZE 10//求最大和int maxSubArr(int* arr, int n, int& begin, int& end){int curSum = 0;int maxSum = 0;int curBegin = 0;int curEnd = 0;begin = end = 0;for (int i=0; i<n; i++){        curSum += arr[i];if (curSum < 0){curSum = 0;if (i+1<n){curBegin = curEnd = (i+1);}}else if (curSum > maxSum){maxSum = curSum;begin = curBegin;end = curEnd;curEnd++;}else{curEnd++;}}return maxSum;}void main(){int arr[ARR_SIZE] = {1,-2,3,-1};int a,b;cout<<maxSubArr(arr, ARR_SIZE,a,b)<<endl;cout<<arr[a]<<" "<<arr[b]<<endl;}