Skip to content
Related Articles
Get the best out of our app
GeeksforGeeks App
Open App
geeksforgeeks
Browser
Continue

Related Articles

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

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

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 <bits/stdc++.h>
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




<script>
    // JavaScript program for above approach
 
    // Function to minimize answer after choosing
    // all the triplets from arr[]
    const minTriplets = (arr, N) => {
 
        // To store the final answer
        let ans = 0;
 
        // Sort the array
        arr.sort();
 
        // Traverse the array
        for (let 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
 
    let N = 7;
 
    let arr = [1, 2, 4, 6, 7, 8, 3];
 
    document.write(minTriplets(arr, N));
 
    // This code is contributed by rakeshsahni
 
</script>

 
 

Output

10

 

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

 


My Personal Notes arrow_drop_up
Last Updated : 03 Dec, 2021
Like Article
Save Article
Similar Reads
Related Tutorials