# Maximum sum of smallest and second smallest in an array

Given an array, find maximum sum of smallest and second smallest elements chosen from all possible subarrays. More formally, if we write all (nC2) subarrays of array of size >=2 and find the sum of smallest and second smallest, then our answer will be maximum sum among them.
Examples:

```Input : arr[] = [4, 3, 1, 5, 6]
Output : 11
Subarrays with smallest and second smallest are,
[4, 3]        smallest = 3    second smallest = 4
[4, 3, 1]    smallest = 1    second smallest = 3
[4, 3, 1, 5]    smallest = 1    second smallest = 3
[4, 3, 1, 5, 6]    smallest = 1    second smallest = 3
[3, 1]         smallest = 1    second smallest = 3
[3, 1, 5]     smallest = 1    second smallest = 3
[3, 1, 5, 6]    smallest = 1    second smallest = 3
[1, 5]        smallest = 1    second smallest = 5
[1, 5, 6]    smallest = 1    second smallest = 5
[5, 6]         smallest = 5    second smallest = 6
Maximum sum among all above choices is, 5 + 6 = 11

Input : arr[] =  {5, 4, 3, 1, 6}
Output : 9
```

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

A simple solution is to generate all subarrays, find sum of smallest and second smallest of every subarray. Finally return maximum of all sums.

An efficient solution is based on the observation that this problem reduces to finding a maximum sum of two consecutive elements in array.

## CPP

 `// C++ program to get max sum with smallest ` `// and second smallest element from any subarray ` `#include ` `using` `namespace` `std; ` ` `  `/*  Method returns maximum obtainable sum value ` `    ``of smallest and the second smallest value ` `    ``taken over all possible subarrays */` `int` `pairWithMaxSum(``int` `arr[], ``int` `N) ` `{ ` `   ``if` `(N < 2) ` `     ``return` `-1; ` ` `  `   ``// Find two consecutive elements with maximum ` `   ``// sum. ` `   ``int` `res = arr + arr; ` `   ``for` `(``int` `i=1; i

## JAVA

 `// Java program to get max sum with smallest ` `// and second smallest element from any subarray ` `import` `java.lang.*; ` `class` `num{ ` ` `  `// Method returns maximum obtainable sum value ` `// of smallest and the second smallest value ` `// taken over all possible subarrays */ ` `static` `int` `pairWithMaxSum(``int``[] arr, ``int` `N) ` `{ ` `if` `(N < ``2``) ` `    ``return` `-``1``; ` ` `  `// Find two consecutive elements with maximum ` `// sum. ` `int` `res = arr[``0``] + arr[``1``]; ` `for` `(``int` `i=``1``; i

## Python3

 `# Python 3 program to get max  ` `# sum with smallest and second ` `# smallest element from any  ` `# subarray ` ` `  `# Method returns maximum obtainable ` `# sum value of smallest and the ` `# second smallest value taken  ` `# over all possible subarrays  ` `def` `pairWithMaxSum(arr, N): ` ` `  `    ``if` `(N < ``2``): ` `        ``return` `-``1` `     `  `    ``# Find two consecutive elements with ` `    ``# maximum sum. ` `    ``res ``=` `arr[``0``] ``+` `arr[``1``]  ` `     `  `    ``for` `i ``in` `range``(``1``, N``-``1``): ` `        ``res ``=` `max``(res, arr[i] ``+` `arr[i ``+` `1``])  ` `     `  `    ``return` `res  ` `     `  `# Driver code ` `arr ``=` `[``4``, ``3``, ``1``, ``5``, ``6``]  ` `N ``=` `len``(arr) ` ` `  `print``(pairWithMaxSum(arr, N))  ` ` `  `# This code is contributed by Smitha Dinesh Semwal `

## C#

 `// C# program to get max sum with smallest ` `// and second smallest element from any subarray ` `using` `System; ` ` `  `class` `GFG { ` ` `  `// Method returns maximum obtainable sum value ` `// of smallest and the second smallest value ` `// taken over all possible subarrays  ` `static` `int` `pairWithMaxSum(``int` `[]arr, ``int` `N) ` `{ ` `     `  `if` `(N < 2) ` `    ``return` `-1; ` ` `  `// Find two consecutive elements  ` `// with maximum sum. ` `int` `res = arr + arr; ` `for` `(``int` `i = 1; i < N - 1; i++) ` `    ``res = Math.Max(res, arr[i] + arr[i + 1]); ` ` `  `return` `res; ` `} ` ` `  `// Driver code ` `public` `static` `void` `Main() ` `{ ` `    ``int` `[]arr = {4, 3, 1, 5, 6}; ` `    ``int` `N = arr.Length; ` `    ``Console.Write(pairWithMaxSum(arr, N)); ` `} ` `} ` ` `  `// This code is contributed by Nitin Mittal. `

## PHP

 ` `

Output:

```11
```

Time Complexity : O(n)

Thanks to Md Mishfaq Ahmed for suggesting this approach.

This article is contributed by Utkarsh Trivedi. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

My Personal Notes arrow_drop_up

Improved By : nitin mittal, vt_m

Article Tags :
Practice Tags :

2

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.