Skip to content
Related Articles

Related Articles

Improve Article
Maximum sum of smallest and second smallest in an array
  • Difficulty Level : Easy
  • Last Updated : 28 Apr, 2021

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

 

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 <bits/stdc++.h>
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[0] + arr[1];
   for (int i=1; i<N-1; i++)
      res = max(res, arr[i] + arr[i+1]);
 
   return res;
}
 
//  Driver code to test above methods
int main()
{
    int arr[] = {4, 3, 1, 5, 6};
    int N = sizeof(arr) / sizeof(int);
 
    cout << pairWithMaxSum(arr, N) << endl;
    return 0;
}

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<N-1; i++)
    res = Math.max(res, arr[i] + arr[i+1]);
 
return res;
}
 
// Driver program
public static void main(String[] args)
{
    int arr[] = {4, 3, 1, 5, 6};
    int N = arr.length;
    System.out.println(pairWithMaxSum(arr, N));
}
}
//This code is contributed by
//Smitha Dinesh Semwal

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[0] + arr[1];
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




<?php
// PHP 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 */
function pairWithMaxSum( $arr, $N)
{
    if ($N < 2)
        return -1;
     
    // Find two consecutive
    // elements with maximum
    // sum.
    $res = $arr[0] + $arr[1];
    for($i = 1; $i < $N - 1; $i++)
        $res = max($res, $arr[$i] +
                    $arr[$i + 1]);
     
    return $res;
}
 
    // Driver Code
    $arr = array(4, 3, 1, 5, 6);
    $N = count($arr);
 
    echo pairWithMaxSum($arr, $N);
 
// This code is contributed by anuj_67.
?>

Javascript




// javascript 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
 
function pairWithMaxSum(arr,  N)
{
       
if (N < 2)
    return -1;
   
// Find two consecutive elements
// with maximum sum.
 
var res = arr[0] + arr[1];
for (var i = 1; i < N - 1; i++)
    res = Math.max(res, arr[i] + arr[i + 1]);
   
return res;
}
   
// Driver code
 
    var arr = [4, 3, 1, 5, 6]
    var N = arr.length;
    document.write(pairWithMaxSum(arr, N));
 
// This code is contributed by bunnyram19.

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.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer DSA Live Classes 




My Personal Notes arrow_drop_up
Recommended Articles
Page :