LeetCode Problem

How to Solve Non-decreasing Subsequences

To solve this problem, iterate through the array using backtracking, leveraging hash tables to track unique subsequences. Focus on maintaining non-decreasing order as you explore potential subsequences. The solution explores array scanning and hash lookup for efficiency and correctness.

GhostInterview Help

Need help with Non-decreasing Subsequences without spending extra time grinding it?

GhostInterview can read Non-decreasing Subsequences from a screenshot, generate the answer path, explain the complexity, and support solver-first interview workflows when you need direct help fast.

Screenshot Input

Capture the prompt fast instead of rewriting the problem by hand.

Answer + Complexity

Get the solution path, trade-offs, and complexity summary in one pass.

Stealth Workflow

Stay outside captured layers on supported screen-share workflows.

Problem #491Array scanning plus hash lookupReviewed 2026-03-07
Difficulty
Medium
Primary pattern
Array scanning plus hash lookup
Answer-first problem summary
Step-by-step approach and complexity
GhostInterview solver workflow

To solve this problem, iterate through the array using backtracking, leveraging hash tables to track unique subsequences. Focus on maintaining non-decreasing order as you explore potential subsequences. The solution explores array scanning and hash lookup for efficiency and correctness.

Problem Statement

Given an integer array nums, return all possible non-decreasing subsequences of the array with at least two elements. Each subsequence should be returned in any order, and subsequences must maintain the order in the original array.

You can assume that the length of nums will not exceed 15, making a backtracking solution feasible. The goal is to find subsequences where the elements do not decrease as you move through the sequence, and the solution must handle arrays with duplicates as well.

Examples

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 details omitted.

Example 2

Input: nums = [4,4,3,2,1]

Output: [[4,4]]

Example details omitted.

Constraints

  • 1 <= nums.length <= 15
  • -100 <= nums[i] <= 100

Solution Approach

Backtracking with Hash Table

Use a backtracking approach where each potential subsequence is constructed step by step. At each step, verify if the new number can be added to the subsequence without breaking the non-decreasing rule. Use a hash table to ensure uniqueness of subsequences.

Array Scanning and Element Comparison

Iterate through the array, comparing elements to their predecessors. If the current element is greater than or equal to the last element of the subsequence, append it to the subsequence and continue exploring. This ensures all subsequences are non-decreasing.

Pruning with Early Termination

Prune unnecessary branches of the recursion tree to improve efficiency. If a subsequence has reached a length of two, store it, and skip further exploration if it cannot lead to valid subsequences.

Complexity Analysis

MetricValue
TimeDepends on the final approach
SpaceDepends on the final approach

The time and space complexity depends on the method used for backtracking and the number of unique subsequences generated. With a maximum array length of 15, the solution involves exploring potential subsequences, which can be exponential in nature. The use of hash tables ensures uniqueness of subsequences, reducing unnecessary recomputations.

What Interviewers Usually Probe

  • The candidate effectively applies backtracking and hash table usage to avoid redundant subsequences.
  • The solution scales well to the upper constraint, showing consideration of optimization techniques like pruning.
  • The candidate demonstrates a clear understanding of array scanning and how it helps ensure subsequences remain non-decreasing.

Common Pitfalls or Variants

Common pitfalls

  • Failure to track unique subsequences leading to repeated results.
  • Not pruning the recursion tree early enough, causing excessive computational overhead.
  • Incorrect handling of edge cases such as arrays with duplicate elements.

Follow-up variants

  • Modify the problem to allow subsequences of length one.
  • Expand the problem to allow strictly increasing subsequences only.
  • Add a constraint where subsequences must sum to a target value.

How GhostInterview Helps

  • GhostInterview assists in identifying key points of backtracking and array scanning for optimized subsequence generation.
  • The platform provides insights into hash table usage for ensuring uniqueness, a critical part of this problem.
  • GhostInterview emphasizes optimization techniques, such as pruning and early termination, to avoid unnecessary computations.

Topic Pages

FAQ

What is the main pattern used in solving the Non-decreasing Subsequences problem?

The main pattern for solving this problem is array scanning combined with backtracking, leveraging hash tables to ensure subsequences remain unique.

How can I optimize my solution for Non-decreasing Subsequences?

Optimize by pruning unnecessary recursive branches and using hash tables to track and avoid duplicate subsequences.

Can Non-decreasing Subsequences be solved in linear time?

No, this problem involves exploring all potential subsequences, leading to an exponential time complexity depending on the array size.

What are the constraints for the Non-decreasing Subsequences problem?

The array length is constrained to be between 1 and 15, and element values are between -100 and 100.

Why is backtracking used in the Non-decreasing Subsequences problem?

Backtracking is used to explore all possible subsequences, ensuring we generate all non-decreasing subsequences of length two or more.

GhostInterview Solver

Need direct help with Non-decreasing Subsequences instead of spending more time grinding it?

Download GhostInterview when you want a LeetCode solver, not another long practice loop. Capture Non-decreasing Subsequences from a screenshot, get the answer path and complexity, and use supported stealth workflows that stay outside captured layers.

Screenshot Input

Capture the prompt fast instead of rewriting the problem by hand.

Answer + Complexity

Get the solution path, trade-offs, and complexity summary in one pass.

Stealth Workflow

Stay outside captured layers on supported screen-share workflows.