Given an integer array, your task is to find all the different possible increasing subsequences of the given array, and the length of an increasing subsequence should be at least 2
Example
Input: [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]]
Note:
- The length of the given array will not exceed 15.
- The range of integer in the given array is [-100,100].
- The given array may contain duplicates, and two equal integers should also be considered as a special case of increasing sequence.
Solution
So the solution here will be start with the each number in the input array and build the increasing non-duplicate subsequences. Like when we start with 4
and try to build subsequences around 4
, we will get [4, 6], [4, 6, 7], [4, 6, 7, 7], [4, 7], [4, 7, 7]
. We will be using recursion to achieve the desired results
package com.programtalk.learn.interview.questions; import java.util.ArrayList; import java.util.List; /** * * @author programtalk.com * */ public class IncreasingSubsequencesSolution { public List<List<Integer>> findSubsequences(int[] input) { List<List<Integer>> result = new ArrayList<>(); findSequence(result, new ArrayList<Integer>(), input, 0); return result; } private void findSequence(List<List<Integer>> result, List<Integer> list, int[] nums, int id) { if (list.size() >= 2) { // add the created subsequences to the result result.add(new ArrayList<Integer>(list)); } List<Integer> unique = new ArrayList<Integer>(); for (int i = id; i < nums.length; i++) { if (id > 0 && nums[i] < nums[id - 1]) { // we need increasing numbers or equal numbers continue; } if (unique.contains(nums[i])) { // skip duplicates for subsequences continue; } unique.add(nums[i]); list.add(nums[i]); findSequence(result, list, nums, i + 1); list.remove(list.size() - 1); } } public static void main(String[] args) { int[] input = {4,6,7,7}; List<List<Integer>> subsequences = new IncreasingSubsequencesSolution().findSubsequences(input); System.out.println(subsequences); } }
The program should not compile.
You can not add int in array List type of Integer. e.g. unique.add(nums[i]); // compile time error