Wednesday, July 3, 2024
HomeData ModellingData Structure & AlgorithmMinimum partitions of maximum size 2 and sum limited by given value

Minimum partitions of maximum size 2 and sum limited by given value

Given an array arr[] of positive numbers, find minimum number of sets in array which satisfy following property, 

  1. A set can contain maximum two elements in it. The two elements need not to be contiguous. 
  2. Sum of elements of set should be less than or equal to given Key. It may be assumed that given key is greater than or equal to the largest array element.

Examples:

Input: arr[] = [10, 20, 12], key = 25
Output: 2
We break into two parts {10, 12} and {2}

Input : arr[] = [3, 5, 3, 4], key=5
Output : 4
Explanation: 4 sets (3), (5), (3), (4)

The idea is to first sort the array, then follow two pointer approach. We begin two pointers from two corners of the sorted array. If their sum is smaller than or equal to given key, then we make set of them, else we consider the last element alone.

Below is the implementation of the above approach : 

C++




// C++ program to count minimum number of partitions
// of size 2 and sum smaller than or equal to given
// key.
#include <algorithm>
#include <iostream>
using namespace std;
 
int minimumSets(int arr[], int n, int key)
{
    int i, j;
 
    // sort the array
    sort(arr, arr + n);
 
    // if sum of ith smaller and jth larger element is
    // less than key, then pack both numbers in a set
    // otherwise pack the jth larger number
    // alone in the set
    for (i = 0, j = n - 1; i <= j; ++i)
        if (arr[i] + arr[j] <= key)
            j--;
 
    // After ending of loop i will contain minimum
    // number of sets
    return i;
}
 
int main()
{
    int arr[] = { 3, 5, 3, 4 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int key = 5;
    cout << minimumSets(arr, n, key);
    return 0;
}


Java




// Java program to count minimum number of partitions
// of size 2 and sum smaller than or equal to given
// key.
 
import java.util.Arrays;
class GFG {
 
 
static int minimumSets(int arr[], int n, int key)
{
    int i, j;
 
    // sort the array
    Arrays.sort(arr);
 
    // if sum of ith smaller and jth larger element is
    // less than key, then pack both numbers in a set
    // otherwise pack the jth larger number
    // alone in the set
    for (i = 0, j = n - 1; i <= j; ++i)
        if (arr[i] + arr[j] <= key)
            j--;
 
    // After ending of loop i will contain minimum
    // number of sets
    return i;
}
 
 
 
    public static void main (String[] args) {
    int []arr = { 3, 5, 3, 4 };
    int n =arr.length;
    int key = 5;
    System.out.println( minimumSets(arr, n, key));
    }
}
// This code is contributed by chandan_jnu.


Python3




# Python 3 program to count minimum number
# of partitions of size 2 and sum smaller
# than or equal to given key.
 
def minimumSets(arr, n, key):
     
    # sort the array
    arr.sort(reverse = False)
 
    # if sum of ith smaller and jth larger
    # element is less than key, then pack
    # both numbers in a set otherwise pack
    # the jth larger number alone in the set
    j = n - 1
    for i in range(0, j + 1, 1):
        if (arr[i] + arr[j] <= key):
            j -= 1
 
    # After ending of loop i will
    # contain minimum number of sets
    return i + 1
 
# Driver Code
if __name__ == '__main__':
    arr = [3, 5, 3, 4]
    n = len(arr)
    key = 5
    print(minimumSets(arr, n, key))
 
# This code is contributed by
# Shashank_Sharma


C#




// C# program to count minimum
// number of partitions of size
// 2 and sum smaller than or
// equal to given key.
using System;
class GFG
{
 
static int minimumSets(int []arr,
                       int n, int key)
{
    int i, j;
 
    // sort the array
    Array.Sort(arr);
 
    // if sum of ith smaller and
    // jth larger element is less
    // than key, then pack both
    // numbers in a set otherwise
    // pack the jth larger number
    // alone in the set
    for (i = 0, j = n - 1; i <= j; ++i)
        if (arr[i] + arr[j] <= key)
            j--;
 
    // After ending of loop i
    // will contain minimum
    // number of sets
    return i;
}
 
// Driver Code
public static void Main ()
{
    int []arr = { 3, 5, 3, 4 };
    int n =arr.Length;
    int key = 5;
    Console.WriteLine(minimumSets(arr, n, key));
}
}
 
// This code is contributed
// by chandan_jnu.


PHP




<?php
// PHP program to count minimum
// number of partitions of size
// 2 and sum smaller than or
// equal to given key.
function minimumSets($arr, $n, $key)
{
    $i; $j;
 
    // sort the array
    sort($arr);
 
    // if sum of ith smaller and
    // jth larger element is less
    // than key, then pack both
    // numbers in a set otherwise
    // pack the jth larger number
    // alone in the set
    for ($i = 0, $j = $n - 1; $i <= $j; ++$i)
        if ($arr[$i] + $arr[$j] <= $key)
            $j--;
        return $i;
}
 
// Driver Code
$arr = array( 3, 5, 3, 4 );
$n = count($arr);
$key = 5;
echo minimumSets($arr, $n, $key);
 
// This code is contributed
// by chandan_jnu   
?>


Javascript




<script>
 
 
// Javascript program to count minimum number of partitions
// of size 2 and sum smaller than or equal to given
// key.
 
function minimumSets(arr, n, key)
{
    var i, j;
 
    // sort the array
    arr.sort((a,b)=> a-b)
 
    // if sum of ith smaller and jth larger element is
    // less than key, then pack both numbers in a set
    // otherwise pack the jth larger number
    // alone in the set
    for (i = 0, j = n - 1; i <= j; ++i)
        if (arr[i] + arr[j] <= key)
            j--;
 
    // After ending of loop i will contain minimum
    // number of sets
    return i;
}
 
var arr = [3, 5, 3, 4];
var n = arr.length;
var key = 5;
document.write( minimumSets(arr, n, key));
 
</script>


Output

4

Complexity Analysis:

  • Time complexity: O(nlogn)
  • Auxiliary Space: O(1)

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

Nokonwaba Nkukhwana
Experience as a skilled Java developer and proven expertise in using tools and technical developments to drive improvements throughout a entire software development life cycle. I have extensive industry and full life cycle experience in a java based environment, along with exceptional analytical, design and problem solving capabilities combined with excellent communication skills and ability to work alongside teams to define and refine new functionality. Currently working in springboot projects(microservices). Considering the fact that change is good, I am always keen to new challenges and growth to sharpen my skills.
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments