时间复杂度为O(n^2)的算法:
//1007. Maximum Subsequence Sum(25)
//O(n^2)算法
#include<iostream>
using namespace std;
int main() {
int K, i, j;
int a[10001] = {};
int sum = 0;
int start, end;
int count = 0;
cin >> K;
for (i = 0; i < K; i++) {
cin >> a[i];
if (a[i] < 0)
count++;
}
if (count == K) {
cout << 0 <<" "<< a[0] <<" "<< a[K - 1] << endl;
return 0;
}
for (i = 0; i < K; i++) {
int temp = 0;
for (j = i; j < K; j++) {
temp += a[j];
if (temp>sum) {
sum = temp;
start = a[i];
end = a[j];
}
}
}
cout << sum << " " << start << " " << end << endl;
return 0;
}
时间复杂度为O(n)的算法:(该算法参考改编自此处)
#include <iostream>
#include <vector>
using namespace std;
int main() {
int K, flag = 0, sum = -1, temp = 0, left = 0, right = 0, tempindex = 0;
cin >> K;
vector<int> v(K);
for (int i = 0; i < K; i++) {
cin >> v[i];
if (v[i] >= 0)
flag = 1;
temp = temp + v[i];
if (temp > sum) {
sum = temp;
left = tempindex;
right = i;
}
else if (temp < 0) {
temp = 0;
tempindex = i + 1;
}
}
if (flag == 0)
cout << 0 << " " << v[0] << " " << v[K - 1] << endl;
else
cout << sum << " " << v[left] << " " << v[right] << endl;
return 0;
}