Suppose we have a list of numbers called nums and another value k, we have to find the lexicographically smallest subsequence of size k.
So, if the input is like nums = [2, 3, 1, 10, 3, 4] k = 3, then the output will be [1, 3, 4]
To solve this, we will follow these steps −
- l := size of nums, r := k - 1
- out := a new list
- for j in range 0 to k, do
- mn := nums[complement of r]
- for i in range r to l, do
- if mn >= nums[complement of i], then
- mn := nums[complement of i]
- l := i
- if mn >= nums[complement of i], then
- r := r - 1
- insert mn at the end of out
- return out
Example (Python)
Let us see the following implementation to get better understanding −
class Solution: def solve(self, nums, k): l, r = len(nums), k - 1 out = [] for j in range(k): mn = nums[~r] for i in range(r, l): if mn >= nums[~i]: mn = nums[~i] l = i r -= 1 out.append(mn) return out ob = Solution() nums = [2, 3, 1, 10, 3, 4] k = 3 print(ob.solve(nums, k))
Input
[2, 3, 1, 10, 3, 4], 3
Output
[1, 3, 4]