在这个问题中,我们得到了一个数组arr []。我们的任务是创建一个程序来查找数组中最小和第二最小的最大和。
问题描述-我们需要找到数组之和子数组的最小和第二个最小元素的和。并返回所有此类子数组总和的最大值。
让我们举个例子来了解这个问题,
arr[] = {3, 5, 4, 2, 9, 1, 6}输出结果
11
在所有可能的子数组中,
{2, 9} 具有最小元素的最大总和。
Sum = 2 + 9 = 11解决该问题的简单方法是生成所有子数组。找到最小和第二小的元素,求和。返回所有的最大和。
另一个更有效的解决方案是基于对示例的观察。我们需要找到最大总和,该总和将是数组中两个连续元素对的总和。我们将找到最大和对。
初始化-
maxSum = −1
第1步-
loop i −> 0 to n−1
步骤1.1 -
if maxSum < (arr[i] + arr[i+1]). Then, maxSum = (arr[i] + arr[i+1])
第2步-
Return maxSum.
该程序说明了我们解决方案的工作原理,
#include <iostream>
using namespace std;
int calcMaxSumPairs(int arr[], int n) {
int maxSum = −1;
for (int i=0; i< (n − 1); i++)
if(maxSum < (arr[i] + arr[i + 1]))
maxSum = (arr[i] + arr[i + 1]);
return maxSum;
}
int main() {
int arr[] = {3, 4, 2, 9, 5, 6};
int n = sizeof(arr) / sizeof(int);
cout<<"最小值与最大值之和数组是"<<calcMaxSumPairs(arr, n);
return 0;
}输出结果
最小值与最大值之和数组是 14