Get maximum items when other items of total cost of an item are free

31 May, 2022
Given a list of prices of ‘N’ items. A person can buy only one item of any price and he can get other items for free such that the total price of the rest of the items doesn’t exceed the price of the bought item. The task is to find the maximum number of items the person can have.Examples:  
Input: n = 5, arr = {5, 3, 1, 5, 6} Output: 3 The person can buy any item of price 5 or 6 and download items of prices 1 and 3 for free. So, he can get at most 3 items.Input: n = 2, arr = {7, 7} Output: 2  
 
Approach:  
The person should buy the most expensive item and then start taking the items starting from the least pricing (until the total price is lest than or equal to the bought item) in order to maximize the total number of items. Thus, we sort the list of prices and choose the last element, then we will iterate from 1st index to n-2 index and check if the total sum is less than or equal to the last element.  
Below is the implementation of the above approach:  
C++
Java
Python3
C#
PHP
Javascript
// C++ implementation of// the above approach#include <bits/stdc++.h>using namespace std; // Function to count the// total number of itemsint  items(int n, int a[]){     // Sort the prices    sort(a,a+n);     // Choose the last element    int z = a[n-1];     // Initial count of item    int x = 1;     // Sum to keep track of    // the total price    // of free items    int s = 0;    for (int i=0;i<n-1;i++)    {        s += a[i];         // If total is less than        // or equal to z then        // we will add 1 to the answer        if (s <= z)            x+= 1;        else            break;    }    return x;}int main(){int n = 5; int a[]= {5, 3, 1, 5, 6}; cout<<items(n, a);} //contributed by Arnab Kundu
// Java implementation of// the above approachimport java.util.Arrays;import java.io.*; class GFG { // Function to count the// total number of itemsstatic int items(int n, int a[]){     // Sort the prices    Arrays.sort(a);     // Choose the last element    int z = a[n-1];     // Initial count of item    int x = 1;     // Sum to keep track of    // the total price    // of free items    int s = 0;    for (int i=0;i<n-1;i++)    {        s += a[i];         // If total is less than        // or equal to z then        // we will add 1 to the answer        if (s <= z)            x+= 1;        else            break;    }    return x;}        // Driver code    public static void main (String[] args) {         int n = 5;        int a[]= {5, 3, 1, 5, 6};        System.out.println(items(n, a));    }//This code is contributed by ajit   }
# Python3 implementation of# the above approach # Function to count the# total number of itemsdef items(n, a):     # Sort the prices    a.sort()     # Choose the last element    z = a[n-1]     # Initial count of item    x = 1     # Sum to keep track of    # the total price    # of free items    s = 0    for i in range(0, n-1):         s += a[i]         # If total is less than        # or equal to z then        # we will add 1 to the answer        if (s <= z):            x+= 1        else:            break    return x n = 5a = [5, 3, 1, 5, 6]print(items(n, a))
// C# implementation of the// above approachusing System; class GFG{// Function to count the// total number of itemsstatic int items(int n, int []a){     // Sort the prices    Array.Sort(a);     // Choose the last element    int z = a[n - 1];     // Initial count of item    int x = 1;     // Sum to keep track of    // the total price    // of free items    int s = 0;    for (int i = 0; i < n - 1; i++)    {        s += a[i];         // If total is less than or equal to z        // then we will add 1 to the answer        if (s <= z)            x += 1;        else            break;    }    return x;} // Driver codestatic public void Main (){    int n = 5;    int []a = {5, 3, 1, 5, 6};    Console.WriteLine(items(n, a));}} // This code is contributed// by akt_mit
<?php//PHP implementation of// the above approach// Function to count the// total number of items function items($n, $a){     // Sort the prices    sort($a);     // Choose the last element    $z = $a[$n-1];     // Initial count of item    $x = 1;     // Sum to keep track of    // the total price    // of free items    $s = 0;    for ($i=0;$i<$n-1;$i++)    {        $s += $a[$i];         // If total is less than        // or equal to z then        // we will add 1 to the answer        if ($s <= $z)            $x+= 1;        else            break;    }    return $x;}//Code driven$n = 5;$a= array(5, 3, 1, 5, 6); echo items($n, $a);  //This code is contributed by ajit?>
<script>    // Javascript implementation of the above approach         // Function to count the    // total number of items    function items(n, a)    {         // Sort the prices        a.sort(function(a, b){return a - b});         // Choose the last element        let z = a[n - 1];         // Initial count of item        let x = 1;         // Sum to keep track of        // the total price        // of free items        let s = 0;        for (let i = 0; i < n - 1; i++)        {            s += a[i];             // If total is less than or equal to z            // then we will add 1 to the answer            if (s <= z)                x += 1;            else                break;        }        return x;    }         let n = 5;    let a = [5, 3, 1, 5, 6];    document.write(items(n, a));     </script>
3
 
Time Complexity: O(N*logN), as we are using inbuilt sort function.
Auxiliary Space: O(1), as we are not using any extra space.
andrew1234
jit_t
decode2207
rohan07
Arrays
Greedy
Sorting
Arrays
Greedy
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.