Maximize number of elements from Array with sum at most K
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.
Below is the implementation of the above approach:
C++14
#include <bits/stdc++.h>
using namespace std;
int maxSelections( int A[], int n, int k)
{
sort(A, A + n);
int sum = 0;
int count = 0;
for ( int i = 0; i < n; i++) {
sum = sum + A[i];
if (sum > k) {
break ;
}
count++;
}
return count;
}
int main()
{
int A[] = { 3, 7, 2, 9, 4 };
int k = 15;
int n = sizeof (A) / sizeof (A[0]);
cout << maxSelections(A, n, k);
return 0;
}
|
Java
import java.util.*;
class GFG{
static int maxSelections( int A[], int n, int k)
{
Arrays.sort(A);
int sum = 0 ;
int count = 0 ;
for ( int i = 0 ; i < n; i++)
{
sum = sum + A[i];
if (sum > k)
{
break ;
}
count++;
}
return count;
}
public static void main(String[] args)
{
int A[] = { 3 , 7 , 2 , 9 , 4 };
int k = 15 ;
int n = A.length;
System.out.print(maxSelections(A, n, k));
}
}
|
Python3
def maxSelections(A, n, k):
A.sort();
sum = 0 ;
count = 0 ;
for i in range (n):
sum = sum + A[i];
if ( sum > k):
break ;
count + = 1 ;
return count;
if __name__ = = '__main__' :
A = [ 3 , 7 , 2 , 9 , 4 ];
k = 15 ;
n = len (A);
print (maxSelections(A, n, k));
|
C#
using System;
class GFG{
static int maxSelections( int [] A, int n, int k)
{
Array.Sort(A);
int sum = 0;
int count = 0;
for ( int i = 0; i < n; i++)
{
sum = sum + A[i];
if (sum > k)
{
break ;
}
count++;
}
return count;
}
public static void Main(String[] args)
{
int [] A = { 3, 7, 2, 9, 4 };
int k = 15;
int n = A.Length;
Console.Write(maxSelections(A, n, k));
}
}
|
Javascript
<script>
function maxSelections( A, n, k)
{
A.sort();
let sum = 0;
let count = 0;
for (let i = 0; i < n; i++) {
sum = sum + A[i];
if (sum > k) {
break ;
}
count++;
}
return count;
}
let A = [ 3, 7, 2, 9, 4 ];
let k = 15;
let n = A.length;
document.write(maxSelections(A, n, k));
</script>
|
Time Complexity: O(N*log N)
Auxiliary Space: O(1)
Last Updated :
12 May, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...