# Solving Leetcode Interviews in Seconds with AI: Non-decreasing Subsequences


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "491" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like [Chatmagic](https://www.chatmagic.app), we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

	# Problem Statement
	> 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.   Example 1:  Input: nums = [4,6,7,7] Output: [[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]  Example 2:  Input: nums = [4,4,3,2,1] Output: [[4,4]]    Constraints:  1 <= nums.length <= 15 -100 <= nums[i] <= 100  

	# Explanation
	*   **Depth-First Search (DFS) with Backtracking:** Explore all possible subsequences using a recursive DFS approach.
*   **Non-decreasing Constraint:** Maintain the non-decreasing order while building subsequences. Discard branches that violate this constraint.
*   **Set for Uniqueness:** Use a set to store the subsequences to avoid duplicates. Tuples are used as set elements since lists aren't hashable.

*   **Runtime Complexity:** O(2<sup>n</sup>), where n is the length of the input array. Although we use a set to prevent duplicates, in the worst case (an array full of the same number), we will still have to explore all possible subsequences.
*   **Storage Complexity:** O(2<sup>n</sup>) in the worst case to store the subsequences in the set.

	
	# Code
	```python
	def findSubsequences(nums):
    result = set()
    current_sequence = []

    def backtrack(index):
        if len(current_sequence) >= 2:
            result.add(tuple(current_sequence))

        if index == len(nums):
            return

        for i in range(index, len(nums)):
            if not current_sequence or nums[i] >= current_sequence[-1]:
                current_sequence.append(nums[i])
                backtrack(i + 1)
                current_sequence.pop()

    backtrack(0)
    return [list(seq) for seq in result]
	```
			
