题解 | #最大连续子序列#
最大连续子序列
https://www.nowcoder.com/practice/afe7c043f0644f60af98a0fba61af8e7
#include <bits/stdc++.h> using namespace std; const int MAXN = 1e4 + 10; int arr[MAXN]; int dp[MAXN]; int main() { int n; while (scanf("%d", &n) != EOF) { if (n == 0) {//当K为0时,输入结束,该用例不被处理。 break; } //输入 for (int i = 0; i < n; ++i) { scanf("%d", &arr[i]); } int maximum = INT_MIN; int start; int last; int head;//输出时第一个 int tail;//输出时最后一个 for (int i = 0; i < n; ++i) {//找连续的正数出现。。。 if (i == 0 || dp[i - 1] < 0) { dp[i] = arr[i]; start = arr[i]; last = arr[i]; } else {//大于零的,累加 dp[i] = dp[i - 1] + arr[i]; last = arr[i]; } if (maximum < dp[i]) { maximum = dp[i]; head = start; tail = last; } } if (maximum < 0) {//当K为0时,输入结束,该用例不被处理。 maximum = 0; head = arr[0]; tail = arr[n - 1]; } printf("%d %d %d\n", maximum, head, tail); } return 0; }