zoukankan      html  css  js  c++  java
  • [LeetCode] 491. Increasing Subsequences

    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]]

    Constraints:

    • 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.

    递增子序列。题意是给一个无序的整型int数组,请你返回所有递增的子序列。相等的元素也视为递增。

    思路是回溯backtracking。还是会利用到经典的回溯模板,这道题只需要在几个地方略加修改即可。首先因为input里面会有重复的数字,如果是连在一起的相同数字,也会被视为递增,所以一定要用一个hashset帮助去重。去重的方式有两种,一是在回溯的过程中进行去重,另一种是对结果集进行去重。我这里是对结果集进行去重。

    其次回溯的base case是只要子集长度大于1就可以加入结果集。回溯的过程中,只要后一个数字 >= 前一个数字,就加入当前子集并进入下一层的递归。

    时间O(2^n)

    空间O(n)

    Java实现

     1 class Solution {
     2     public List<List<Integer>> findSubsequences(int[] nums) {
     3         HashSet<List<Integer>> set = new HashSet<>();
     4         if (nums == null || nums.length == 0) {
     5             return new ArrayList<>();
     6         }
     7         helper(set, new ArrayList<>(), nums, 0);
     8         List res = new ArrayList<>(set);
     9         return res;
    10     }
    11 
    12     private void helper(HashSet<List<Integer>> set, List<Integer> list, int[] nums, int start) {
    13         if (list.size() > 1) {
    14             set.add(new ArrayList<>(list));
    15         }
    16         for (int i = start; i < nums.length; i++) {
    17             if (list.size() == 0 || list.get(list.size() - 1) <= nums[i]) {
    18                 list.add(nums[i]);
    19                 helper(set, list, nums, i + 1);
    20                 list.remove(list.size() - 1);
    21             }
    22         }
    23     }
    24 }

    LeetCode 题目总结

  • 相关阅读:
    C# 通过反射初探ORM框架的实现原理
    Redis-Nosql数据库入门
    HTTPS 建立连接的详细过程
    Spring面试题
    struts2面试整理
    Java面试基本知识
    Spring MVC面试整理
    Mybatis面试整理
    Sublime 正则替换
    Hiberante知识点梳理
  • 原文地址:https://www.cnblogs.com/cnoodle/p/13737526.html
Copyright © 2011-2022 走看看