# Minimize sum of minimum and second minimum elements from all possible triplets

• Last Updated : 03 Dec, 2021

Given an array arr[], the task is to minimize the sum of minimum and second minimum elements from all possible triplets. One element can be a part of exactly one triplet.

Input: arr[] = {1, 2, 4, 6, 7, 8, 3}, N = 7
Output: 10
Explanation: Here two triplets are formed as the size of arr[] is 7 and 7/3 = 2.
Triplet 1 – {1, 6, 3} -> Two minimum elements are 1 and 3.
Triplet 2 – {2, 4, 8} -> Two minimum elements are 2 and 4.
Hence sum = 1 + 3 + 2 + 4 = 10

Input: arr[] = {5, 7, 3, 8, 9}
Output: 8

Approach: This problem can be solved by using the Greedy Approach. Follow the steps below to solve the given problem.

• Sort the array arr[] in non-decreasing order, so that it gets easier to choose minimum elements in every triplet.
• Initialize a variable say ans = 0, to store the minimum possible answer.
• Traverse arr[] and make every triplet by taking two elements from the left side and one element from the right side.
• Return ans as the final answer.

## C++14

 `// C++ program for above approach` `#include ` `using` `namespace` `std;`   `// Function to minimize answer after choosing` `// all the triplets from arr[]` `int` `minTriplets(vector<``int``>& arr, ``int` `N)` `{`   `    ``// To store the final answer` `    ``int` `ans = 0;`   `    ``// Sort the array` `    ``sort(arr.begin(), arr.end());`   `    ``// Traverse the array` `    ``for` `(``int` `i = 0, j = N - 1;` `         ``i + 1 < j;` `         ``i += 2, j--) {`   `        ``// Add both the smallest numbers` `        ``// of current triplet` `        ``ans += arr[i];` `        ``ans += arr[i + 1];` `    ``}`   `    ``// Return the ans as the required answer` `    ``return` `ans;` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `N = 7;`   `    ``vector<``int``> arr = { 1, 2, 4, 6, 7, 8, 3 };`   `    ``cout << minTriplets(arr, N);` `}`

## Java

 `// Java program for above approach` `import` `java.util.*;` `public` `class` `GFG` `{`   `  ``// Function to minimize answer after choosing` `  ``// all the triplets from arr[]` `  ``static` `int` `minTriplets(``int` `[]arr, ``int` `N)` `{`   `  ``// To store the final answer` `  ``int` `ans = ``0``;`   `  ``// Sort the array` `  ``Arrays.sort(arr);`   `  ``// Traverse the array` `  ``for` `(``int` `i = ``0``, j = N - ``1``;` `       ``i + ``1` `< j;` `       ``i += ``2``, j--) {`   `    ``// Add both the smallest numbers` `    ``// of current triplet` `    ``ans += arr[i];` `    ``ans += arr[i + ``1``];` `  ``}`   `  ``// Return the ans as the required answer` `  ``return` `ans;` `}`   `// Driver Code` `public` `static` `void` `main(String args[])` `{` `  ``int` `N = ``7``;`   `  ``int` `[]arr = { ``1``, ``2``, ``4``, ``6``, ``7``, ``8``, ``3` `};`   `  ``System.out.print(minTriplets(arr, N));` `}` `}`   `// This code is contributed by Samim Hossain Mondal.`

## Python3

 `# Python program for above approach`   `# Function to minimize answer after choosing` `# all the triplets from arr[]` `def` `minTriplets (arr, N) :`   `    ``# To store the final answer` `    ``ans ``=` `0`   `    ``# Sort the array` `    ``arr.sort()`   `    ``i ``=` `0` `    ``j ``=` `N ``-` `1` `    `  `    ``# Traverse the array` `    ``while``( i ``+` `1` `< j):` `      `  `        ``# Add both the smallest numbers` `        ``# of current triplet` `        ``ans ``+``=` `arr[i]` `        ``ans ``+``=` `arr[i ``+` `1``]` `        ``i ``+``=` `2` `        ``j ``-``=` `1` `        `  `    ``# Return the ans as the required answer` `    ``return` `ans`   `# Driver Code` `N ``=` `7` `arr ``=` `[``1``, ``2``, ``4``, ``6``, ``7``, ``8``, ``3``]` `print``(minTriplets(arr, N))`   `# This code is contributed by gfgking`

## C#

 `// C# program for above approach` `using` `System;` `using` `System.Collections;` `using` `System.Collections.Generic;`   `class` `GFG` `{` `  `  `// Function to minimize answer after choosing` `// all the triplets from arr[]` `static` `int` `minTriplets(``int` `[]arr, ``int` `N)` `{`   `    ``// To store the final answer` `    ``int` `ans = 0;`   `    ``// Sort the array` `    ``Array.Sort(arr);`   `    ``// Traverse the array` `    ``for` `(``int` `i = 0, j = N - 1;` `         ``i + 1 < j;` `         ``i += 2, j--) {`   `        ``// Add both the smallest numbers` `        ``// of current triplet` `        ``ans += arr[i];` `        ``ans += arr[i + 1];` `    ``}`   `    ``// Return the ans as the required answer` `    ``return` `ans;` `}`   `// Driver Code` `public` `static` `void` `Main()` `{` `    ``int` `N = 7;` `    ``int` `[]arr = { 1, 2, 4, 6, 7, 8, 3 };` `    ``Console.Write(minTriplets(arr, N));` `}` `}`   `// This code is contributed by Samim Hossain Mondal.`

## Javascript

 ``

Output

`10`

Time Complexity: O(N log N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Recommended Articles
Page :