Given an array arr[] of size N and an integer K (N % K = 0), the task is to split array into subarrays of size K such that the sum of 2nd smallest elements of each subarray is the minimum possible.
Examples:
Input: arr[] = {11, 20, 5, 7, 8, 14, 2, 17, 16, 10}, K = 5
Output: 13
Explanation: Splitting array into subsets {11, 5, 14, 2, 10} and {20, 7, 8, 17, 16} generates minimum sum of second smallest elements( = 5 + 8 = 13).Input: arr[] = {13, 19, 20, 5, 17, 11, 10, 8, 23, 14}, K = 5
Output: 19
Explanation: Splitting array into subsets {10, 19, 20, 11, 23} and {17, 5, 8, 13, 14} generates minimum sum of second smallest elements(= 11 + 8 = 19).
Approach: The problem can be solved by sorting technique. Follow the steps below to solve this problem:
- Sort the given array in ascending order.
- Since all subsets are of length Kgroups, choose first K odd-indexed elements starting from 1 and calculate their sum.
- Print the obtained sum.
Below is the implementation of the above approach:
C++
// C++ implementation for above approach #include <bits/stdc++.h> using namespace std; // Function to find the minimum sum of // 2nd smallest elements of each subset int findMinimum( int arr[], int N, int K) { // Sort the array sort(arr, arr + N); // Stores minimum sum of second // elements of each subset int ans = 0; // Traverse first K 2nd smallest elements for ( int i = 1; i < 2 * (N / K); i += 2) { // Update their sum ans += arr[i]; } // Print the sum cout << ans; } // Driver Code int main() { // Given Array int arr[] = { 11, 20, 5, 7, 8, 14, 2, 17, 16, 10 }; // Given size of the array int N = sizeof (arr) / sizeof (arr[0]); // Given subset lengths int K = 5; findMinimum(arr, N, K); return 0; } |
Java
// Java implementation for the above approach import java.io.*; import java.util.*; class GFG { // Function to find the minimum sum of // 2nd smallest elements of each subset public static void findMinimum( int arr[], int N, int K) { // Sort the array Arrays.sort(arr); // Stores minimum sum of second // elements of each subset int ans = 0 ; // Traverse first K 2nd smallest elements for ( int i = 1 ; i < 2 * (N / K); i += 2 ) { // Update their sum ans += arr[i]; } // Print the sum System.out.println(ans); } // Driver Code public static void main(String[] args) { // Given Array int [] arr = { 11 , 20 , 5 , 7 , 8 , 14 , 2 , 17 , 16 , 10 }; // Given length of array int N = arr.length; // Given subset lengths int K = 5 ; findMinimum(arr, N, K); } } |
Python3
# Python3 implementation for above approach # Function to find the minimum sum of # 2nd smallest elements of each subset def findMinimum(arr, N, K): # Sort the array arr = sorted (arr) # Stores minimum sum of second # elements of each subset ans = 0 # Traverse first K 2nd smallest elements for i in range ( 1 , 2 * (N / / K), 2 ): # Update their sum ans + = arr[i] # Prthe sum print (ans) # Driver Code if __name__ = = '__main__' : # Given Array arr = [ 11 , 20 , 5 , 7 , 8 , 14 , 2 , 17 , 16 , 10 ] # Given size of the array N = len (arr) # Given subset lengths K = 5 findMinimum(arr, N, K) # This code is contributed by mohit kumar 29 |
C#
// C# implementation for above approach using System; class GFG{ // Function to find the minimum sum of // 2nd smallest elements of each subset public static void findMinimum( int [] arr, int N, int K) { // Sort the array Array.Sort(arr); // Stores minimum sum of second // elements of each subset int ans = 0; // Traverse first K 2nd smallest elements for ( int i = 1; i < 2 * (N / K); i += 2) { // Update their sum ans += arr[i]; } // Print the sum Console.WriteLine(ans); } // Driver Code public static void Main() { // Given Array int [] arr = { 11, 20, 5, 7, 8, 14, 2, 17, 16, 10 }; // Given length of array int N = arr.Length; // Given subset lengths int K = 5; findMinimum(arr, N, K); } } // This code is contributed by susmitakundugoaldanga |
13
Time Complexity: O(NlogN)
Space Complexity: O(N)
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.