我有个问题。给定一个数字数组 a,其中 (-10^9 <= ai <= 10^9)。对于这个数字数组,你需要找到数组中和最大的子段,取出这个和以及这样的子段的数量。我设法找到了最大金额(我附上了代码),但我不太明白如何快速找到金额。如果您有任何想法,我将非常感激。
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; ++i) cin >> a[i];
int ans = a[0], sum = 0;
for (int r = 0; r < n; ++r) {
sum += a[r];
ans = max(ans, sum);
sum = max(sum, 0);
}
cout << ans;
unordered_map<int, int> check;
int s[n + 1];
for (int i = 0; i < n; i++) {
s[i + 1] = s[i] + a[i];
if (check.find(s[i + 1]) != check.end()) {
++check[s[i + 1]];
} else {
check[s[i + 1]] = 1;
}
}
计算累积和(从第一个元素到第 k 个元素的和)并将其添加到字典中。
如果字典包含键 currentsum-best,则您已找到具有最佳总和的段。如果您将总和的数量存储在值中,您将获得分段的数量
不使用语言特性的Python代码: