算法(一)—— 回溯(3)

news2024/11/28 11:47:45

文章目录

  • 1 78 子集
  • 2 90 子集II
  • 3 491 递增子序列


子集问题

1 78 子集

如果把 子集问题、组合问题、分割问题都抽象为一棵树的话,那么组合问题和分割问题是收集树的叶子节点,而子集问题是找树的所有节点
在这里插入图片描述
因为需要找到所有的节点,所以终止条件可以去掉。

class Solution {
public:
    vector<int> path;
    vector<vector<int>> res;

    void dfs(vector<int>& nums, int startIndex){
        //if(startIndex == nums.size()){
        //    return;
        //}

        for(int i = startIndex; i < nums.size(); ++i){
            path.push_back(nums[i]);
            res.push_back(path);
            dfs(nums, i + 1);
            path.pop_back();
        }
    }

    vector<vector<int>> subsets(vector<int>& nums) {
        dfs(nums, 0);
        path.clear();
        res.push_back(path);
        return res;
    }
};

2 90 子集II

此题与题1不同之处在于,给定的nums数组中可能包含重复的元素
作为子集问题同样无需return条件。

class Solution {
public:
    vector<int> path;
    vector<vector<int>> res;

    void dfs(vector<int>& nums, int startIndex) {
        res.push_back(path);

        for(int i = startIndex; i < nums.size(); ++i) {
            if(i > startIndex && nums[i] == nums[i-1]){
                continue;
            }
            path.push_back(nums[i]);
            dfs(nums, i + 1);
            path.pop_back();
        }
    }

    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        dfs(nums, 0);
        return res;
    }
};

3 491 递增子序列

在这里插入图片描述
两个特点:
1、一个元素不能重复使用,所以需要startIndex。
2、数组中可能含有重复元素(但不能用之前的去重套路,因为不能对数组进行排序)。
故需要用哈希表进行去重。

unordered_set<int> uset; // 使用set来对本层元素进行去重
for (int i = startIndex; i < nums.size(); i++) {
    if ((!path.empty() && nums[i] < path.back())
            || uset.find(nums[i]) != uset.end()) {
            continue;
    }
    uset.insert(nums[i]); // 记录这个元素在本层用过了,本层后面不能再用了
    path.push_back(nums[i]);
    backtracking(nums, i + 1);
    path.pop_back();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/524404.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaEE(系列一 )-- 计算机是如何进行工作的

目录 1. 操作系统 2. 进程/任务&#xff08;Process/Task&#xff09; 2.1 进程 2.2 进程管理 2.2.1 进程的结构体 2.2.2 进程调度 2.3 并行 和 并发 2.4 内存分配 -- 内存管理(Memory Manage) 2.5 进程间通信 3. 线程 1. 操作系统 操作系统是一组做计算机资源管理的软件的…

谷歌I/O大会重磅发布:Bard编码能力优化后仍不支持中文,开发者选择CodeGeeX更佳

谷歌I/O大会今天凌晨发布&#xff0c;打出系列AI组合拳。除了发布升级版语言模型PaLM2之外&#xff0c;Bard能力也要起飞。 凭借改进的数学、逻辑和推理技能&#xff0c;Bard 现在可以帮助生成、解释和调试 20 多种编程语言的代码&#xff0c;开发者们需要输入prompt&#xff0…

C#从入门到入坟(原创不易,转载请注明出处)

文章目录 C# 基础篇0 环境部署1 Hello world1.1 两种框架1.2 创建项目的过程1.3 项目组成结构1.3.1 解决方案和项目1.3.2 程序集信息1.3.3 引用1.3.4 配置文件1.3.5 程序入口类 1.4 解决方案1.5 Debug 和 Release1.6 CSharp虚拟机初始1.7 .Net Framework混合语言开发1.8 托管代…

上下文感知的体素对比学习用于标签高效的多器官分割

文章目录 Context-Aware Voxel-Wise Contrastive Learning for Label Efficient Multi-organ Segmentation摘要本文方法有监督损失Context-Aware Contrastive Learning Loss for Unlabeled Voxels 实验结果 Context-Aware Voxel-Wise Contrastive Learning for Label Efficient…

GSMA-eSIM-官网规范说明

GSMA | eSIM Consumer and IoT Specifications - eSIM GSMA | eSIM Consumer and IoT Specifications - eSIMhttps://www.gsma.com/esim/esim-specification/ 架构、测试、技术规范 3.0版本 测试套件 EID的定义和分配 GSMA EID Definition and Assignment 合规性规范 自我评…

第十四届蓝桥杯青少组模拟赛Python真题 (2023年2月12日),包含答案

第十四届蓝桥杯青少组模拟赛Python真题 (2023年2月12日) 一、选择题 第 1 题 单选题 关于Python3.10,下列选项描述正确的是 ( )。 答案:B 第 2 题 单选题 下列数据类型中,哪一个是不可变的?() 答案:B 第 3 题 单选题 以下关于函数参数描述正确的是 ()。 答案:D 第 …

【JAVAEE】文件操作——IO

目录 &#x1f48b;1. 冯诺伊曼体系 &#x1f437;2. 内存与外存的区别 ✨3. 文件 &#x1f381;3.1 认识文件 ✌3.2 文件的管理 &#x1f373;3.3 文件路径 &#x1f383;3.4 文件的保存 &#x1f451;3.4.1 文本文件 &#x1f4f7;3.4.2 二进制文件 &#x1f380;3.5 文件系…

Python基本数据类型之一——set(集合)

Python基本数据类型之一——set(集合) 一、python集合定义 集合(set)是一个无序不重复元素的序列。基本功能是进行成员关系测试和删除重复元素。 二、创建方式 在Python中&#xff0c;创建集合有两种方式&#xff1a; 一种是用一对大括号将多个用逗号分隔的数据括起来。 另一种…

Vue3-黑马(九)

目录&#xff1a; &#xff08;1&#xff09;vue3-antdv-删除选中 &#xff08;2&#xff09;vue3-进阶-antdv-增改 &#xff08;3&#xff09;vue3-进阶-antdv-增改2 &#xff08;1&#xff09;vue3-antdv-删除选中 我们在表格中在加一列&#xff0c;做一个复选框&#xff…

【一起啃书】《机器学习》第六章 支持向量机

文章目录 第六章 支持向量机6.1 间隔和支持向量6.2 对偶问题6.3 核函数6.4 软间隔与正则化6.5 支持向量回归6.6 核方法6.7 一些问题 第六章 支持向量机 6.1 间隔和支持向量 给定训练样本集 D { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } , y i ∈ { − 1 , …

【YOLO系列】--YOLOv4超详细解读/总结

YOLOv4&#xff08;YOLOv4: Optimal Speed and Accuracy of Object Detection&#xff09;&#xff08;原文&#xff0b;解读/总结&#xff0b;翻译&#xff09; 系列文章&#xff1a; YOLOv1论文解读/总结_yolo论文原文_耿鬼喝椰汁的博客-CSDN博客 YOLOv2论文解读/总结_耿鬼…

[免疫学]抗原递呈详解

目录 &#x1f9eb;1. 抗原递呈是什么 &#x1f9eb;1.1 MHCⅠ类分子 &#x1f9eb;1.2 MHCⅡ类分子 &#x1f9eb;1.3 MHCⅠ类分子 分子介导的抗原递呈 &#x1f9eb;1.4 MHCⅡ类分子 分子介导的抗原递呈 &#x1f9eb;1.5 抗原递呈细胞 &#x1f9eb;1.5.1 激活的树突状…

初识Linux篇:第三篇

初识Linux篇&#xff1a;第三篇 初识Linux篇&#xff1a;第三篇1.Linux中常见的通配符1.1*号通配符1.2 &#xff1f;通配符1.3[ ]通配符1.4{ }通配符 2.man指令3.cp指令4.mv指令5.alias指令6. echo指令7.cat指令8.more指令9.less指令10.head与tail指令11.在Linux中写代码 总结 …

DHCP中继负载均衡使用原理

DHCP常用四种报文 基于UDP67服务端&#xff0c; 68端口客户端 discover 广播 offer 单播 rquest 广播 ack 单播 DHCP 50%时间续租时request报文为单播报文 DHCP 87.5%时间请求重新绑定IP时request报文为广播报文 DHCP的另类配置方案&#xff1a; 负载均衡&#xff1a; ip re…

【Python_Pandas】reset_index() 函数解析

【Python_Pandas】reset_index函数解析 文章目录 【Python_Pandas】reset_index函数解析1. 介绍2. 示例2.1 参数drop2.2 参数inplace2.3 参数level2.4 参数col_level2.5 参数col_fill 参考 1. 介绍 pandas.DataFrame.reset_index reset_index(levelNone, dropFalse, inplaceF…

【AI大模型智慧办公】用《文心一言》1分钟写一篇博客简直yyds

文章目录 前言文心一言是什么文心一言可以做什么文心一言写博客申请体验写在最后 前言 当今社会&#xff0c;博客已成为了许多人分享观点、知识和经验的重要平台。用文心一言写博客是将自己的思考、想法和经验以文字的形式呈现出来&#xff0c;让更多人了解自己。通过写博客&a…

【Python入门】Python循环语句(while循环的基础语法)

前言 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于Python零基础入门系列&#xff0c;本专栏主要内容为Python基础语法、判断、循环语句、函…

【计网】第三章 数据链路层(4)局域网、以太网、无线局域网、VLAN

文章目录 3.6-1 局域网基本概念和体系结构一、局域网二、局域网基本概念和体系结构三、局域网传输介质四、局域网介质控制方法五、局域网分类六、IEEE 802 标准七、MAC 子层和 LLC 子层总结&#xff1a; 3.6-2 以太网一、以太网概述二、以太网提供无连接、不可靠的服务三、以太…

RabbitMQ启动失败

首先&#xff0c;你得先确认的你得Erlang的版本和RabbitMQ的版本是否能相互兼容&#xff0c;如果不能&#xff0c;请先下载对应的Erlang版本或者RabbitMQ版本。 1. 在Java中使用了RabbitMQ发现不停的尝试连接&#xff0c;却连不上的问题 先在cmd下输入erl&#xff0c;看一下E…

EXCEL比较麻烦零碎的日期数据的处理,数字转日期,日期转数字

1 有时候想输入日期&#xff0c;但会被EXCEL自动识别为数字 原因是 有的EXCEL版本会处理&#xff0c;有的则不会自动处理为日期。也可能&#xff0c;单元格因为各种原因被提前设置了格式&#xff0c;比如常规等。还有的原因是因为EXCEL从xml等其他文件里导入的日期时间等数据本…