首尾相连的最大子数组和,求出连续的最大子数组和和最小的子数组和,取其中最大子数组和和总和减去最小子数组和的最大值即为所求。
题目地址:点击打开链接
C++代码:
//
// 1527.cpp
// 九度练习题
//
// Created by leizh007 on 15/7/13.
// Copyright (c) 2015年 leizh007. All rights reserved.
//
#include <iostream>
#include <algorithm>
using namespace std;
const int maxSize = 100001;
int data[maxSize];
int n;
void run() {
int maxSum=0,minSum=0;
int ma=0,mi=0;
int sum=0;
for (int i=0; i<n; ++i) {
sum+=data[i];
maxSum+=data[i];
minSum+=data[i];
ma=max(ma,maxSum);
mi=min(mi,minSum);
maxSum=maxSum<0?0:maxSum;
minSum=minSum>0?0:minSum;
}
if (ma>sum-mi) {
cout<<ma<<endl;
}else{
cout<<sum-mi<<endl;
}
}
int main() {
while (cin>>n) {
for (int i=0; i<n; ++i) {
cin>>data[i];
}
run();
}
return 0;
}