Given an integer array nums
, return all the different possible non-decreasing subsequences of the given array with at least two elements. You may return the answer in any order.
nums
?
nums
having a length between 1 and 15 for practicality in problems like this.To solve this problem, we can use a backtracking approach to find all possible non-decreasing subsequences. The key point here is ensuring that subsequences with at least two elements are returned and handling duplicates properly.
from typing import List
def findSubsequences(nums: List[int]) -> List[List[int]]:
def backtrack(start: int, path: List[int]):
if len(path) > 1:
subsequences.add(tuple(path))
for i in range(start, len(nums)):
if not path or nums[i] >= path[-1]:
backtrack(i + 1, path + [nums[i]])
subsequences = set()
backtrack(0, [])
return [list(seq) for seq in subsequences]
# Example usage:
nums = [4, 6, 7, 7]
print(findSubsequences(nums))
backtrack
takes two parameters: the starting index start
and the current path of numbers path
.path
is greater than 1, we add it to the subsequences
set to ensure it meets the requirement of being a non-decreasing subsequence with at least two elements.start
to the end of nums
, we check if it can be appended to the path
to maintain the non-decreasing order.backtrack
with the next starting index and the new path including the current element.subsequences
, guarantees that we get unique subsequences since tuples of the same sequence aren’t inserted multiple times into the set.The time complexity can be analyzed based on the following:
n
is the length of nums
.Therefore, the overall time complexity is approximately O(n * 2^n). This is feasible for the given problem constraints where n
(length of nums
) is between 1 and 15.
Got blindsided by a question you didn’t expect?
Spend too much time studying?
Or simply don’t have the time to go over all 3000 questions?