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

回溯算法:非递减子序列子集,这题的去重并不是通解!!!!

一、题目

二、分析

这道题是有重复元素的,我们需要做到单层去重。可以参考以下链接

回溯算法:子集2-CSDN博客但是,以往的去重我们都是利用used数组和对输入的数组进行排序才做到的,这道题要求我们求子序列,我们是无法先把输入数组排序的,那该如何做呢?

这题可以对每一层的元素都建立一个set集合,如果访问过的元素,就把他放入set。

三、代码

public class DiZengZiXuLie {
    @Test
    public void test(){
        int[] test={4,6,7,7,5,7};
        findSubsequences(test);
        System.out.println(res);
    }

    List<List<Integer>> res=new ArrayList<>();//定义结果集
    List<Integer> path=new ArrayList<>();//定义单个结果

    
    public List<List<Integer>> findSubsequences(int[] nums) {
       backtracking(nums,0);
       return res;
        
    }
    public void backtracking(int[] nums,int begin){
      if(path.size()>=2){
      res.add(new ArrayList<>(path));}
        if(begin==nums.length){
            return;
        }
        Set<Integer> set=new HashSet<>(nums.length);
        for (int i = begin; i < nums.length; i++) {
            if(i>0&&set.contains(nums[i])){//同层必须去重
                continue;
            }
            if(path.size()>0&&nums[i]<path.get(path.size()-1)){//不满足递增,跳过
                continue;
            }
            path.add(nums[i]);
            set.add(nums[i]);
            backtracking(nums,i+1);
            path.remove(path.size()-1);
        }
    }
}


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

相关文章:

  • Spring 核心技术解析【纯干货版】- XIV:Spring 消息模块 Spring-Jms 模块精讲
  • 如何恢复苹果手机置出厂设置
  • 新版Tomcat MySQL IDEA 安装配置过程遇到的问题
  • C#上位机--选择语句(switch)
  • Golang | 每日一练 (3)
  • 基于深度学习与知识图谱的设备智能维护系统KGPHMAgent
  • qt QDockWidget总结
  • 耀世16Pro鼠标卡顿
  • 【数据库系统概论】第第12章 并发控制
  • 开源低代码平台与 Vue.js
  • MySql三大范式
  • VSCode本地python包“无法解析导入”
  • 网络安全-攻击流程-用户层
  • C++:线程当中的锁专题
  • Ollama Docker 镜像部署
  • java(spring boot)实现向deepseek/GPT等模型的api发送请求/多轮对话(附源码)
  • 数据库-SQLite
  • 为什么docker 容器有的没有PORTS
  • 长尾关键词优化三步法:提升SEO搜索排名实战
  • Linux基础 -- 中断子系统之级联中断