dfs专题8——子集

dfs专题8——子集
示例图

🔥近津薪荼: [个人主页]🎬个人专栏: 《近津薪荼的算法日迹》《Linux操作系统及网络基础知识分享》《c++基础知识详解》《c语言基础知识详解》✨不要物化,矮化,弱化,钝化自己,保持锋芒,不要停止学习这个世界上只有两个人真正在注意着你八岁的你,和八十岁的你,他们此刻正在注视着你,一个希望你 勇敢开始,一个希望你 不留遗憾


1.上期参考代码

classSolution{ vector<vector<int>>ret; vector<int>path; vector<bool>check=vector<bool>(6,false);public: vector<vector<int>>permute(vector<int>& nums){dfs(nums);return ret;}voiddfs(vector<int>& nums){if(path.size()==nums.size()){ ret.push_back(path);return;}for(int i=0;i<nums.size();i++){if(check[i]==false){ path.push_back(nums[i]); check[i]=true;dfs(nums);//回溯 check[i]=false; path.pop_back();}}}};

2.本期知识点导图

3.本期要讲解的题目是

子集

要点:

  • nums元素各异
  • 返回空集

4.解题

本题我们可以画出两种决策树

4.1决策树1

高中,我们学集合的时候知道,一个集合的子集个数为2n个,这个2n怎么来的?

在一个元素对于集合来说,只有两种情况:存在或者不存在

对于每一个元素进行存在或者不存正在的划分,我们可以得出以下的决策图:

我们发现决策树的结果完全符合我们的期望,所以这就是一个好的决策树。

有了决策树,根据其写代码就方便多啦~

根据决策树,我们得出需要

两个全局变量:

  • 上一级已经存放了的元素–>变量path(也可以设置成函数参数,避免返回现场操作)
  • 存放path的二维数组用于返回所有结果–>ret

父子层信息传递需要:

  • 数组–>nums
  • 这一层是对数组中第几个元素进行判断–>pos

代码逻辑

观察我们想要的结果,都是在叶子结点,很明显,

出口在叶子节点

重复子问题:对于每个元素根据其是否存在,分两种情况讨论
子问题干啥:存在则将其放入path中,进入下一层,不存在啥也不做,进入下一层

4.2决策树2

我们也可以根据,子集中元素的个数,来画决策图:

这张决策图同样需要全局变量path和ret,它也能获得我们想要的结果,也是一个好的决策图。

由于子集种没有排序,只有组合,所以我们要对重复的子集进行剪枝,如图中所示:按照顺序来给path添加元素

提示:
结合for循环,不用设置return出口,for循环能实现数组递归中的按下标顺序添加元素,进行剪枝,出口的本质是:“没有可选择元素”

不知道大家有没有发现,数组往往是多叉树的遍历,多叉树的遍历必然用到for,而for往往是遍历到最后,也就不需要设置return出口~

5.下期要讲解的题目是:

找出所有子集的异或总和再求和

6.嗟食

如果小编写的内容对佬有帮助,还请大佬点点三连加关注哦

在这里插入图片描述


佬的支持就是我前进的最大动力~

期待与佬的再次相遇~

Read more

Spring Boot 4使用Opentelemetry OTLP协议快速集成Jaeger + Prometheus + loki 实现指标监控,链路追踪,日志聚合

Spring Boot 4使用Opentelemetry OTLP协议快速集成Jaeger + Prometheus + loki 实现指标监控,链路追踪,日志聚合

效果图: 描述 在现代云原生架构中,可观测性不再是可选项,而是一项基本要求。你需要通过指标了解应用程序的运行情况,通过跟踪了解请求的流向,并通过日志了解应用程序的运行状态。 什么是Opentelemetry 官方:https://opentelemetry.io OpenTelemetry(简称 OTel) 是一个开源的、厂商中立的 可观测性(Observability)框架和工具集,旨在统一和标准化应用程序的 指标(Metrics)、日志(Logs)和分布式追踪(Traces) 的生成、收集、处理与导出。 它由 Cloud Native Computing Foundation(CNCF) 托管,是目前云原生生态中最主流、最推荐的可观测性标准,被广泛用于微服务、Kubernetes、Serverless 等现代架构中。 为什么使用Jaeger,Prometheus,Loki Jaeger官方描述与安装:https://www.

By Ne0inhk
分布式 vs 微服务:别再傻傻分不清了

分布式 vs 微服务:别再傻傻分不清了

分布式 vs 微服务:别再傻傻分不清了 🤔 * 引言:一对容易混淆的"双胞胎" * 一、核心定义:完全不同的维度 📚 * 1.1 什么是分布式系统? * 1.2 什么是微服务? * 二、核心区别:目标 vs 形态 🎯 * 2.1 对比表 * 2.2 用一个例子说清楚 * 2.3 代码层面的区别 * 三、分布式系统的常见形态 🏗️ * 3.1 分布式计算 * 3.2 分布式存储 * 3.3 分布式缓存 * 3.4 微服务架构 * 四、两者关系:维恩图 📊 * 五、

By Ne0inhk
SpringBoot + LangChain4j 打造企业级 RAG 智能知识库,多工具集成方案

SpringBoot + LangChain4j 打造企业级 RAG 智能知识库,多工具集成方案

基于 Spring Boot 4 + LangChain4j 1.11 + Ollama + Qdrant +MCP 的一体化 多Agentic 智能体,RAG 系统 本文结合笔者企业级项目,重新抽象,开发,一个真正“开箱即用”的企业级智能知识库系统。它不仅支持标准 RAG 问答,更融合了 Agentic 智能体架构、MCP 文件沙盒、金融专用算子 和 混合模型路由,提供从文档上传到复杂推理的完整闭环体验。 1. 总览:技术栈与核心能力 ✨ 维度技术选型能力说明后端框架Spring Boot 4 + SQLite轻量级持久化,无需额外数据库,生产可切换为其他数据,如mysql,pgsqlAI 引擎LangChain4j 1.11支持 Agentic 工具调用、流式响应、

By Ne0inhk

【GitHub项目推荐--ZeroClaw:零开销、零妥协的Rust原生AI助手基础设施】⭐⭐⭐

简介 ZeroClaw 是一个由ZeroClaw Labs开发的开源、快速、小型且完全自主的AI助手基础设施框架,采用100% Rust编写,秉持“零开销、零妥协”的设计哲学。该项目以其惊人的资源效率著称——能够在仅10美元的硬件上运行,内存占用低于5MB,启动时间短于10毫秒,相比同类解决方案(如OpenClaw)减少99%的内存使用和98%的部署成本。ZeroClaw不仅是一个高性能的AI助手运行时,更是一个完全可插拔的架构,允许开发者“在任何地方部署,交换任何组件”。 核心价值: * 极致效率:3.4MB的独立二进制文件,<5MB内存占用,<10ms启动时间 * 成本革命:专为边缘设备和资源受限环境设计,大幅降低AI助手部署门槛 * 完全自主:内置自治引擎,支持从监督到完全自主的不同运行模式 * 架构灵活:基于trait的模块化设计,所有核心子系统均可热插拔替换 技术定位:ZeroClaw填补了高性能AI助手框架与资源受限环境之间的空白。它既不是另一个“重型”AI平台,也不是简单的脚本工具,而是一个经过精心设计、

By Ne0inhk