当前位置: 首页 > article >正文

491.递增子序列

题目:. - 力扣(LeetCode)

题解:代码随想录

AC代码:

class Solution {
    List<List<Integer>> res=new ArrayList<>();
    List<Integer> path=new ArrayList<>();
    public List<List<Integer>> findSubsequences(int[] nums) {
        backStracking(nums,0);
        return res;
    }
    public void backStracking(int[] nums,int startIndex){
        if(path.size()>=2) res.add(new ArrayList<>(path));
        HashSet<Integer> hs=new HashSet<>();
        for(int i=startIndex;i<nums.length;i++){
            if(!path.isEmpty()&&path.get(path.size()-1)>nums[i]||hs.contains(nums[i])) continue;
                hs.add(nums[i]);
                path.add(nums[i]);
                backStracking(nums,i+1);
                path.removeLast();
        }
    }
}

简单说一下思路:

个人认为本题和组合问题(不能有重复的组合那道)有一点点类似,因为都有一个同层不能重复取,而同枝可重复取(参考题解中Carl的思想,把回溯的全过程看成一棵树)

但是要明确的是该题和上面提到的组合问题不同的是,这个题是有顺序要求的不能进行排序,因为我们要求的是该集合中的递增的子序列(要按照原数组的顺序)

然后值得一提的是因为本题目的数据范围不大,我们直接使用了HashMap来进行一个去重操作(要时刻记得这里的去重是同层的,也就是剪枝,把会重复的剪掉,这里有点难理解,我写一下我的思路:举一个好理解的例子,如果没有这个同层去重的操作,我的数组为[7,7],现在进行回溯的步骤,第一个分支第一层取7第二层取7符合要求得到一个答案[7,7],第二个分支开始,第一层也是取7,第二层同样是7,和第一个分支就重复了,说明他是没必要再多算的),当然也可以用之前用过的used数组。

---------------------------------------------------------------------------------------------------------------------------------

就这样啦,希望下次能不看题解一次过...


http://www.kler.cn/a/376505.html

相关文章:

  • 从0开始的STM32之旅 7 串口通信(I)
  • 阐述对鸿蒙生态的认知和了解,并对鸿蒙生态的崛起进行简要分析
  • 适配器模式适用的场景
  • sublime Text中设置编码为GBK
  • Python——发送HTTP请求
  • 基于Transformer的路径规划 - 第五篇 GPT生成策略_解码方法优化
  • Android各种调试命令
  • 2、片元着色器之有向距离场(SDF)运算:并集、差集、交集
  • go语言中interface之间嵌入与struct之间的嵌入实现多态
  • aws boto3 下载文件
  • 螺旋式开发是不是就是敏捷开发?
  • Jenkins面试整理-如何在 Jenkins 中进行并行构建?
  • 手把手写Linux第一个小程序 - 进度条(5种版本)
  • OpenSSH用户枚举漏洞修复——ubuntu升级ssh版本
  • 线程函数和线程启动的几种不同形式
  • 掌握ElasticSearch(七):相关性评分
  • Axios-Mock-Adapter mock数据
  • 《卷积、卷积操作、卷积神经网络原理探索》
  • 3. 探索 Netty 的粘包与拆包解决方案
  • ARM base instruction -- mneg
  • 正点原子阿尔法ARM开发板-IMX6ULL(十一)——IIC协议和SPI协议--AP3216C环境光传感器和ICM20608六轴传感器
  • 在Zetero中调用腾讯云API的输入密钥的问题
  • 【Linux】信号三部曲——产生、保存、处理
  • ES跟Kafka集成
  • git 切换分支
  • 一个运维牛人对运维规则的10个总结