Given an array **arr[]** of size N and a number K, the task is to find the length of the smallest subsequence such that the sum of the subsequence is greater than or equal to number K.

**Example:**

Input:arr[] = {2, 3, 1, 5, 6, 3, 7, 9, 14, 10, 2, 5}, K = 35

Output:4

Smallest subsequence with the sum greater than or equal to the given sum K is {7, 9, 14, 10}

Input:arr[] = {1, 2, 2, 2, 3, 4, 5, 4, 7, 6, 5, 12}, K = 70

Output:-1

Subsequence with sum greater than equal to the given sum is not possible.

**Approach:**

- This problem can be solved with the help of priority queue
- Traverse input array and insert every array element into priority queue.
- Initialize variables that holds the sum of picked element from priority queue and the variable to get the count of picked element from priority queue to 0
- Pop the elements out from the priority queue untill the priority queue is not empty
- Add the element in into the
**sum** - Increase the count because the element is picked to contribute into the total sum
- Check if the
**sum**is greater than the given number**K**, If yes then stop checking and output the count.

- Add the element in into the

Below is the implementation of above approach.

## C++

`// C++ implementation to find length of smallest ` `// subsequence such that sum of elements ` `// is greater than equal to given number K ` ` ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to find the smallest ` `// subsequence such that sum of elements ` `// is greater than equal to given number K ` `int` `lengthOfSmallestSubsequence(` `int` `K, vector<` `int` `> v) ` `{ ` ` ` `// Initialize priority queue ` ` ` `priority_queue<` `int` `> pq; ` ` ` ` ` `// Loop to insert all elements into ` ` ` `// the priority queue ` ` ` `for` `(` `int` `i = 0; i < v.size(); i++) { ` ` ` `pq.push(v[i]); ` ` ` `} ` ` ` `int` `sum = 0, count = 0; ` ` ` ` ` `// Loop to find the smallest ` ` ` `// subsequence such that sum of elements ` ` ` `// is greater than equal to given number K ` ` ` `while` `(!pq.empty() && sum < K) { ` ` ` `sum += pq.top(); ` ` ` `pq.pop(); ` ` ` `count++; ` ` ` `} ` ` ` `// If sum is less then K ` ` ` `// then return -1 else return count. ` ` ` `if` `(sum < K) { ` ` ` `return` `-1; ` ` ` `} ` ` ` `return` `count; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` ` ` `vector<` `int` `> v{ 2, 3, 1, 5, ` ` ` `6, 3, 7, 9, ` ` ` `14, 10, 2, 5 }; ` ` ` `int` `K = 35; ` ` ` ` ` `cout << lengthOfSmallestSubsequence(K, v); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java implementation to find length of smallest ` `// subsequence such that sum of elements ` `// is greater than equal to given number K ` `import` `java.util.*; ` ` ` `class` `GFG ` `{ ` ` ` `// Function to find the smallest ` `// subsequence such that sum of elements ` `// is greater than equal to given number K ` `static` `int` `lengthOfSmallestSubsequence(` `int` `K, ` `int` `[]v) ` `{ ` ` ` `// Initialize priority queue ` ` ` `Queue<Integer> pq = ` ` ` `new` `PriorityQueue<Integer>(Collections.reverseOrder()); ` ` ` ` ` `// Loop to insert all elements into ` ` ` `// the priority queue ` ` ` `for` `(` `int` `i = ` `0` `; i < v.length; i++) ` ` ` `{ ` ` ` `pq.add(v[i]); ` ` ` `} ` ` ` `int` `sum = ` `0` `, count = ` `0` `; ` ` ` ` ` `// Loop to find the smallest ` ` ` `// subsequence such that sum of elements ` ` ` `// is greater than equal to given number K ` ` ` `while` `(!pq.isEmpty() && sum < K) ` ` ` `{ ` ` ` `sum += pq.peek(); ` ` ` `pq.remove(); ` ` ` `count++; ` ` ` `} ` ` ` ` ` `// If sum is less then K ` ` ` `// then return -1 else return count. ` ` ` `if` `(sum < K) ` ` ` `{ ` ` ` `return` `-` `1` `; ` ` ` `} ` ` ` `return` `count; ` `} ` ` ` `// Driver code ` `public` `static` `void` `main(String[] args) ` `{ ` ` ` `int` `[]v = { ` `2` `, ` `3` `, ` `1` `, ` `5` `, ` ` ` `6` `, ` `3` `, ` `7` `, ` `9` `, ` ` ` `14` `, ` `10` `, ` `2` `, ` `5` `}; ` ` ` `int` `K = ` `35` `; ` ` ` `System.out.print(lengthOfSmallestSubsequence(K, v)); ` `} ` `} ` ` ` `// This code is contributed by Rajput-Ji ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 implementation to find length of smallest ` `# subsequence such that sum of elements ` `# is greater than equal to given number K ` ` ` `# Function to find the smallest ` `# subsequence such that sum of elements ` `# is greater than equal to given number K ` `def` `lengthOfSmallestSubsequence(K, v): ` ` ` ` ` `# Initialize priority queue ` ` ` `pq ` `=` `[] ` ` ` ` ` `# Loop to insert all elements into ` ` ` `# the priority queue ` ` ` `for` `i ` `in` `v: ` ` ` `pq.append(i) ` ` ` `pq.sort() ` ` ` ` ` `sum` `=` `0` ` ` `count ` `=` `0` ` ` ` ` `# Loop to find the smallest ` ` ` `# subsequence such that sum of elements ` ` ` `# is greater than equal to given number K ` ` ` `while` `(` `len` `(pq) > ` `0` `and` `sum` `< K): ` ` ` `sum` `+` `=` `pq[` `-` `1` `] ` ` ` `del` `pq[` `-` `1` `] ` ` ` `count ` `+` `=` `1` ` ` ` ` `# If sum is less then K ` ` ` `# then return -1 else return count. ` ` ` `if` `(` `sum` `< K): ` ` ` `return` `-` `1` ` ` `return` `count ` ` ` `# Driver code ` `v ` `=` `[` `2` `, ` `3` `, ` `1` `, ` `5` `, ` ` ` `6` `, ` `3` `, ` `7` `, ` `9` `, ` ` ` `14` `, ` `10` `, ` `2` `, ` `5` `] ` `K ` `=` `35` ` ` `print` `(lengthOfSmallestSubsequence(K, v)) ` ` ` `# This code is contributed by mohit kumar 29 ` |

*chevron_right*

*filter_none*

**Output:**

4

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.

## Recommended Posts:

- Length of longest subarray in which elements greater than K are more than elements not greater than K
- Smallest subarray of size greater than K with sum greater than a given value
- Count elements such that there are exactly X elements with values greater than or equal to X
- Maximum length subsequence such that adjacent elements in the subsequence have a common factor
- Size of smallest subarray to be removed to make count of array elements greater and smaller than K equal
- Smallest subarray such that all elements are greater than K
- Length of Smallest subarray in range 1 to N with sum greater than a given value
- Smallest subarray from a given Array with sum greater than or equal to K
- Smallest subarray from a given Array with sum greater than or equal to K | Set 2
- Find a number K such that exactly K array elements are greater than or equal to K
- Minimise N such that sum of count of all factors upto N is greater than or equal to X
- Smallest subset with sum greater than all other elements
- Sum of all array elements less than X and greater than Y for Q queries
- Count of Array elements greater than or equal to twice the Median of K trailing Array elements
- Longest subsequence with first and last element greater than all other elements
- Sum of elements in an array with frequencies greater than or equal to that element
- Number of non-decreasing sub-arrays of length greater than or equal to K
- Subarray with difference between maximum and minimum element greater than or equal to its length
- Length of longest subarray with product greater than or equal to 0
- Sum of elements in 1st array such that number of elements less than or equal to them in 2nd array is maximum

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.