C ++子数组中的“ max + min”的最小值

问题陈述

给定一个n个正元素的数组,鉴于子数组的大小应大于等于2,因此我们需要找到子数组中max和min元素的最小和。

示例

如果arr [] = {10,5,15,7,2,1,3},那么当我们加上“ 2 + 1”时,“ max + min”之和为3。

算法

  • 将任何元素添加到子数组都不会增加最大值和最小值的总和。

  • 由于数组的最大值在向数组添加元素时永远不会减少。仅当我们添加更大的元素时,它才会增加。因此,始终仅考虑长度为2的那些子数组始终是最佳选择。

  • 因此,考虑长度为2的所有子阵列,比较总和并取最小值。

示例

#include <bits/stdc++.h>
using namespace std;
int getMaxSum(int *arr, int n) {
   if (n < 2) {
      return -1;
   }
   int result = arr[0] + arr[1];
   for (int i = 1; i + 1 < n; ++i) {
      result = min(result, (arr[i] + arr[i + 1]));
   }
   return result;
}
int main() {
   int arr[] = {10, 5, 15, 7, 2, 1, 3};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "Maximum sum = " << getMaxSum(arr, n) << endl;
   return 0;
}

当您编译并执行上述程序时。它产生以下输出-

输出结果

Maximum sum = 3