#include<bits/stdc++.h>
using namespace std;
int l,r;
int maxSubArraySum(int x[], int n) 
{
	int maxSum = 0;//最大值 
	int thisSum = 0;//当前最大值,临时 
	l = 0;//起始下标 
	r = 0;//终点下标 
	for (int i = 0; i < n; i++) {
		thisSum += x[i];
		if (thisSum > maxSum){
			maxSum = thisSum;
			r = i;
		}
		if (thisSum < 0){
			thisSum = 0;
			if(i <= n - 2 && x[i+1] > 0){//修改起点特判是否越界,以及下一元素的值是否为正 
				l = i + 1;
			}
		}
			
	}
	//如果最大子数组不在数组里面的话(数组元素全部<=0),l,r赋值为-1
	if(l == 0 && r == 0 && x[0] <= 0){
		l = -1;
		r = -1;
	}
	return maxSum;
}
int main()
{
	int n,x[2000];
	cin>>n;
	for(int i=0;i<n;i++)
	cin>>x[i];
	cout<<maxSubArraySum(x,n)<<endl;
	cout<<l<<" "<<r;
}

样例
11
-1 4 6 -3 7 -3 -3 9 -7 6 13


时间复杂度O(n)

  • alipay_img
  • wechat_img
此作者没有提供个人介绍
最后更新于 2020-03-20