题目描述:
本道题用的还是在线处理的方法,跟最大子列和的思路很像,唯一不太一样的可能就是需要记录下标。这道题细节还是蛮多的,一开始“全是负数和0”那个测试点没过,后来在(sum>maxSum)的if语句里加了个特判,然后就顺利AC了!
AC代码:
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int maxSum=0,sum=0,front=0,rear,k,maxFront=0;
int a[10005];
cin>>k;
rear=k-1;
for(int i=0;i<k;i++){
cin>>a[i];
sum+=a[i];
if(sum>maxSum || (sum==0 && maxSum==0)){
maxFront=front;
maxSum=sum;
rear=i;
}
if(sum<0){
sum=0;
front=i+1;
}
}
cout<<maxSum<<" "<<a[maxFront]<<" "<<a[rear]<<endl;
}