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, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,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.
Seen this question in a real interview before?
class Solution {
public List<List<Integer>> findSubsequences(int[] nums) {
LinkedHashSet<List<Integer>> data = new LinkedHashSet<>();
for (int n : nums) {
Iterator<List<Integer>> it = data.iterator();
List<List<Integer>> addTemp = new ArrayList<>();
while (it.hasNext()) {
List<Integer> temp = it.next();
if (n >= temp.get(temp.size() - 1)) {
List<Integer> newList = new ArrayList<>(temp);
newList.add(n);
addTemp.add(newList);
}
}
data.addAll(addTemp);
List<Integer> addNew = new ArrayList<>();
addNew.add(n);
data.add(addNew);
}
List<List<Integer>> re = new ArrayList<>();
Iterator<List<Integer>> it = data.iterator();
while (it.hasNext()) {
List<Integer> temp = it.next();
if (temp.size() > 1)
re.add(temp);
}
return re;
}
}