C++ 数组中最大均衡和
问题陈述
给定一个数组 arr[]。找出 arr[] 中索引 i 的最大前缀和值,该值也是后缀和值。
示例
如果输入数组为 −
Arr[] = {1, 2, 3, 5, 3, 2, 1},则输出为 11,因为 −
- 前缀和 = arr[0..3] = 1 + 2 + 3 + 5 = 11;且
- 后缀和 = arr[3..6] = 5 + 3 + 2 + 1 = 11
算法
- 遍历该数组,并为该数组中的每个索引存储前缀和到 presum[] 中,其中 presum[i] 存储子数组 arr[0..i] 的和。
- 再次遍历该数组,并存储另一个数组 suffsum[] 中的后缀和,其中 suffsum[i] 存储子数组 arr[i..n-1] 的和。
- 对每个索引检查 presum[i] 是否等于 suffsum[i],如果相等,则比较它们与迄今为止的最大值,
示例
#include <bits/stdc++.h> using namespace std; int getMaxSum(int *arr, int n) { int preSum[n]; int suffSum[n]; int result = INT_MIN; preSum[0] = arr[0]; for (int i = 1; i < n; ++i) { preSum[i] = preSum[i - 1] + arr[i]; } suffSum[n - 1] = arr[n - 1]; if (preSum[n - 1] == suffSum[n - 1]) { result = max(result, preSum[n - 1]); } for (int i = n - 2; i >= 0; --i) { suffSum[i] = suffSum[i + 1] + arr[i]; if (suffSum[i] == preSum[i]) { result = max(result, preSum[i]); } } return result; } int main() { int arr[] = {1, 2, 3, 5, 3, 2, 1}; int n = sizeof(arr) / sizeof(arr[0]); cout << "Max equlibrium sum = " << getMaxSum(arr, n) << endl; return 0; }
输出
编译并执行上述程序后,将生成以下输出 −
Max equlibrium sum = 11
广告