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