Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++ 프로그램의 배열에서 가장 작은 것과 두 번째로 작은 것의 최대 합


이 문제에서는 배열 arr[]이 제공됩니다. 우리의 임무는 배열에서 가장 작은 것과 두 번째로 작은 것의 최대 합을 찾는 프로그램을 만드는 것입니다.

문제 설명 - 배열의 합 부분배열에서 가장 작은 요소와 두 번째로 작은 요소의 합을 찾아야 합니다. 그리고 그러한 모든 하위 배열 합계의 최대값을 반환합니다.

예시

문제를 이해하기 위해 예를 들어보겠습니다.

입력

arr[] = {3, 5, 4, 2, 9, 1, 6}

출력

11

설명

Their out of all subarrays possible,
{2, 9} has a maximum sum of smallest elements.
Sum = 2 + 9 = 11

솔루션 접근 방식

문제에 대한 간단한 해결책은 모든 하위 배열을 생성하는 것입니다. 가장 작은 요소와 두 번째로 작은 요소를 찾고 합계를 찾습니다. 모두의 최대 합계를 반환합니다.

또 다른 보다 효율적인 솔루션은 사례 관찰을 기반으로 합니다. Weneed는 배열의 두 연속 요소 쌍의 합이 될 최대 합을 찾습니다. 그리고 우리는 최대 합 쌍을 찾을 것입니다.

알고리즘

초기화 -

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<<"The maximum sum of smallest and second smallest in an
   array is "<<calcMaxSumPairs(arr, n);
   return 0;
}

출력

The maximum sum of smallest and second smallest in an array is 14