Maximize number of elements from Array with sum at most K

12 May, 2021
Given an array A[] of N integers and an integer K, the task is to select the maximum number of elements from the array whose sum is at most K. 
Examples:
Input: A[] = {1, 12, 5, 111, 200, 1000, 10}, K = 50 Output: 4 Explanation: Maximum number of selections will be 1, 12, 5, 10 that is 1 + 12 + 5 + 10 = 28 < 50.
Input: A[] = {3, 7, 2, 9, 4}, K = 15 Output: 3 Explanation: Maximum number of selections will be 3, 2, 4 that is 3 + 2 + 4 =9 < 15.
Naive Approach: The idea is to generate all possible subsequences of the array and find the sum of elements of all the subsequences generated. Find the subsequence with maximum length and with the sum less than or equal to K. Time Complexity: O(2N) Auxiliary Space: (1) 
Efficient Approach: The efficient approach can be solved using the Greedy Technique. Below are the steps:  
Sort the given array.Iterate in the array and keep the track of the sum of elements until the sum is less than or equal to K.If the sum while iterating in the above steps exceeds K then break the loop and print the value of count till that index.
Sort the given array.
Iterate in the array and keep the track of the sum of elements until the sum is less than or equal to K.
If the sum while iterating in the above steps exceeds K then break the loop and print the value of count till that index.
Below is the implementation of the above approach: 
C++14
Java
Python3
C#
Javascript
// C++ program for the above approach#include <bits/stdc++.h>using namespace std; // Function to select a maximum number of// elements in array whose sum is at most Kint maxSelections(int A[], int n, int k){    // Sort the array    sort(A, A + n);     // Calculate the sum and count while    // iterating the sorted array    int sum = 0;    int count = 0;     // Iterate for all the    // elements in the array    for (int i = 0; i < n; i++) {         // Add the current element to sum        sum = sum + A[i];         if (sum > k) {            break;        }         // Increment the count        count++;    }    // Return the answer    return count;} // Driver Codeint main(){    // Given array    int A[] = { 3, 7, 2, 9, 4 };     // Given sum k    int k = 15;    int n = sizeof(A) / sizeof(A[0]);     // Function Call    cout << maxSelections(A, n, k);    return 0;}
// Java program for the above approachimport java.util.*; class GFG{ // Function to select a maximum number of// elements in array whose sum is at most Kstatic int maxSelections(int A[], int n, int k){         // Sort the array    Arrays.sort(A);     // Calculate the sum and count while    // iterating the sorted array    int sum = 0;    int count = 0;     // Iterate for all the    // elements in the array    for(int i = 0; i < n; i++)    {                 // Add the current element to sum        sum = sum + A[i];         if (sum > k)        {            break;        }         // Increment the count        count++;    }         // Return the answer    return count;} // Driver Codepublic static void main(String[] args){         // Given array    int A[] = { 3, 7, 2, 9, 4 };     // Given sum k    int k = 15;    int n = A.length;     // Function call    System.out.print(maxSelections(A, n, k));}} // This code is contributed by Rajput-Ji
# Python3 program for# the above approach # Function to select a maximum# number of elements in array# whose sum is at most Kdef maxSelections(A, n, k):   # Sort the array  A.sort();     # Calculate the sum and  # count while iterating  # the sorted array  sum = 0;  count = 0;   # Iterate for all the  # elements in the array  for i in range(n):     # Add the current element to sum    sum = sum + A[i];     if (sum > k):      break;       # Increment the count      count += 1;       # Return the answer      return count; # Driver Codeif __name__ == '__main__':   # Given array  A = [3, 7, 2, 9, 4];   # Given sum k  k = 15;  n = len(A);   # Function call  print(maxSelections(A, n, k));     # This code is contributed by gauravrajput1
// C# program for the above approachusing System; class GFG{ // Function to select a maximum number of// elements in array whose sum is at most Kstatic int maxSelections(int[] A, int n, int k){     // Sort the array    Array.Sort(A);     // Calculate the sum and count while    // iterating the sorted array    int sum = 0;    int count = 0;     // Iterate for all the    // elements in the array    for(int i = 0; i < n; i++)    {                 // Add the current element to sum        sum = sum + A[i];         if (sum > k)        {            break;        }         // Increment the count        count++;    }     // Return the answer    return count;} // Driver Codepublic static void Main(String[] args){     // Given array    int[] A = { 3, 7, 2, 9, 4 };     // Given sum k    int k = 15;    int n = A.Length;     // Function call    Console.Write(maxSelections(A, n, k));}} // This code is contributed by gauravrajput1
<script> // Javascript program for the above approach // Function to select a maximum number of// elements in array whose sum is at most Kfunction maxSelections( A, n, k){    // Sort the array    A.sort();     // Calculate the sum and count while    // iterating the sorted array    let sum = 0;    let count = 0;     // Iterate for all the    // elements in the array    for (let i = 0; i < n; i++) {         // Add the current element to sum        sum = sum + A[i];         if (sum > k) {            break;        }         // Increment the count        count++;    }    // Return the answer    return count;}  // Driver Code // Given arraylet A = [ 3, 7, 2, 9, 4 ]; // Given sum klet k = 15;let n = A.length; // Function Calldocument.write(maxSelections(A, n, k)); </script>
3
 
Time Complexity: O(N*log N) Auxiliary Space: O(1)  
Rajput-Ji
GauravRajput1
nitin_sharma
Algorithms-Greedy Algorithms
subsequence
Arrays
Greedy
Mathematical
Arrays
Greedy
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.