#include <iostream> #include<string> #include<stdio.h> #include<vector> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char** argv) { int n; cin>>n; vector<int>v(n); int sum = -1,l=0,r=n-1,tmpl=0,tmpr=0,tmpSum=0; for(int i = 0; i < v.size(); i++){ scanf("%d",&v[i]); tmpSum += v[i]; tmpr = i; if(tmpSum < 0){ tmpSum = 0; tmpr = tmpl = i+1; } else if(tmpSum > sum){ sum = tmpSum; l = tmpl; r = tmpr; } } if(sum<0)sum=0; printf("%d %d %d",sum ,v[l] ,v[r]); return 0; }
细节: 1.全为负数的数列,不跟新sum 和l,r 所以初始化为 l = 0, r = n-1;
2. 考虑到可能有只有零和负数的数列,此时最大值为0,但是l 和r需要更新,所以sum 初始值为-1而不是零