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

python-leetcode 61.N皇后

题目:

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。

n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击

给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。


每个皇后必须位于不同行和不同列,因此将 N 个皇后放置在 N×N 的棋盘上,一定是每一行有且仅有一个皇后,每一列有且仅有一个皇后,且任何两个皇后都不能在同一条斜线上。基于上述发现,可以通过回溯的方式寻找可能的解。

回溯的具体做法是:使用一个数组记录每行放置的皇后的列下标,依次在每一行放置一个皇后。每次新放置的皇后都不能和已经放置的皇后之间有攻击:即新放置的皇后不能和任何一个已经放置的皇后在同一列以及同一条斜线上,并更新数组中的当前行的皇后列下标。当 N 个皇后都放置完毕,则找到一个可能的解。当找到一个可能的解之后,将数组转换成表示棋盘状态的列表,并将该棋盘状态的列表加入返回列表。

由于每个皇后必须位于不同列,因此已经放置的皇后所在的列不能放置别的皇后。第一个皇后有 N 列可以选择,第二个皇后最多有 N−1 列可以选择,第三个皇后最多有 N−2 列可以选择(如果考虑到不能在同一条斜线上,可能的选择数量更少),因此所有可能的情况不会超过 N! 种,遍历这些情况的时间复杂度是 O(N!)。

为了降低总时间复杂度,每次放置皇后时需要快速判断每个位置是否可以放置皇后,显然,最理想的情况是在 O(1) 的时间内判断该位置所在的列和两条斜线上是否已经有皇后。

方法一:基于集合的回溯

为了判断一个位置所在的列和两条斜线上是否已经有皇后,使用三个集合 columns、diagonals 
1和 diagonals2分别记录每一列以及两个方向的每条斜线上是否有皇后。

列的表示法很直观,一共有 N 列,每一列的下标范围从 0 到 N−1,使用列的下标即可明确表示每一列。

如何表示两个方向的斜线呢?对于每个方向的斜线,需要找到斜线上的每个位置的行下标与列下标之间的关系。

方向一的斜线为从左上到右下方向,同一条斜线上的每个位置满足行下标与列下标之差相等,例如 (0,0) 和 (3,3) 在同一条方向一的斜线上。因此使用行下标与列下标之差即可明确表示每一条方向一的斜线。

方向二的斜线为从右上到左下方向,同一条斜线上的每个位置满足行下标与列下标之和相等,例如 (3,0) 和 (1,2) 在同一条方向二的斜线上。因此使用行下标与列下标之和即可明确表示每一条方向二的斜线。

每次放置皇后时,对于每个位置判断其是否在三个集合中,如果三个集合都不包含当前位置,则当前位置是可以放置皇后的位置。

class Solution(object):def solveNQueens(self, n):""":type n: int:rtype: List[List[str]]"""def generateBoard():  #生成棋盘board=[]  #用于存储棋盘的每一行for i in range(n):  #遍历所有行,按queens[i]记录的位置放至Qrow[queens[i]]="Q"  #row 是 [".", ".", ".", "."](初始化的空白行)#queens[i]是皇后在当前行i的索引#在queens[i]位置放Q,queens[0] = 1(表示皇后在第 0 行的 第 1 列)#row = [".", "Q", ".", "."]board.append("".join(row))#将列表转换为字符串,作为棋盘格的一行row[queens[i]]="."  #恢复row为初始状态return board  #作为当前皇后排列的字符串表示def dfs(row):  #当前正在处理的行号(从 0 到 n-1)if row==n:  #所有行都放置完毕board=generateBoard() # 生成一个合法的棋盘solutions.append(board) #保存else:for i in range(n): #遍历当前行 row 的所有列 iif i in columns or row-i in diagonal1 or row+i in diagonal2:#皇后的列, 记录右下↘对角线 ,记录左下↙对角线continue #若 i 被占用,直接跳过该列queens[row]=i  #录当前行皇后放置的列号columns.add(i) #记录当前列被占用diagonal1.add(row-i)#记录对角线被占用diagonal2.add(row+i) #记录对角线被占用dfs(row+1)#递归尝试下一行的皇后摆放columns.remove(i)#回溯,撤销当前位置的皇后diagonal1.remove(row-i)#回溯,撤销对角线的占用状态diagonal2.remove(row+i)solutions=[] #存储所有合法的 N 皇后解法queens=[-1]*n #记录每一行皇后的位置,初始化-1表示未放置columns=set([])#记录被占用的列diagonal1=set([])diagonal2=set([])row=["."]*n         #用于构造棋盘,初始时所有行都是 "...." dfs(0)return solutions

时间复杂度:O(N!)其中 N 是皇后数量

空间复杂度:O(N)


方法二:基于位运算的回溯

方法一使用三个集合记录分别记录每一列以及两个方向的每条斜线上是否有皇后,每个集合最多包含 N 个元素,因此集合的空间复杂度是 O(N)。如果利用位运算记录皇后的信息,就可以将记录皇后信息的空间复杂度从 O(N) 降到 O(1)。

具体做法是,使用三个整数 columns、diagonals 1 和 diagonals 2分别记录每一列以及两个方向的每条斜线上是否有皇后,

每个整数有 N 个二进制位。棋盘的每一列对应每个整数的二进制表示中的一个数位,其中棋盘的最左列对应每个整数的最低二进制位,最右列对应每个整数的最高二进制位。用 0 代表可以放置皇后的位置,1 代表不能放置皇后的位置。

棋盘的边长和皇后的数量 N=8。如果棋盘的前两行分别在第 2 列和第 4 列放置了皇后(下标从 0 开始),则棋盘的前两行如下图所示。

如果要在下一行放置皇后,哪些位置不能放置呢?我们用 0 代表可以放置皇后的位置,1 代表不能放置皇后的位置。新放置的皇后不能和任何一个已经放置的皇后在同一列,因此不能放置在第 2 列和第 4 列,对应 columns=00010100(2)​。

新放置的皇后不能和任何一个已经放置的皇后在同一条方向一(从左上到右下方向)的斜线上,因此不能放置在第 4 列和第 5 列,对应 diagonals 1​ =00110000 (2)。其中,第 4 列为其前两行的第 2 列的皇后往右下移动两步的位置,第 5 列为其前一行的第 4 列的皇后往右下移动一步的位置。

新放置的皇后不能和任何一个已经放置的皇后在同一条方向二(从右上到左下方向)的斜线上,因此不能放置在第 0 列和第 3 列,对应 diagonals 2 =00001001。其中,第 0 列为其前两行的第 2 列的皇后往左下移动两步的位置,第 3 列为其前一行的第 4 列的皇后往左下移动一步的位置。

由此可以得到三个整数的计算方法:

  • 初始时,三个整数的值都等于 0,表示没有放置任何皇后
  • 在当前行放置皇后,如果皇后放置在第 i 列,则将三个整数的第 i 个二进制位(指从低到高的第 i 个二进制位)的值设为 1
  • 进入下一行时,columns 的值保持不变,diagonals1​ 左移一位,diagonals2​ 右移一位,

    由于棋盘的最左列对应每个整数的最低二进制位,即每个整数的最右二进制位,因此对整数的移位操作方向和对棋盘的移位操作方向相反(对棋盘的移位操作方向是 diagonals 1 右移一位,diagonals 2​左移一位)。

 每次放置皇后时,三个整数的按位或运算的结果即为不能放置皇后的位置,其余位置即为可以放置皇后的位置。

class Solution(object):def solveNQueens(self, n):""":type n: int:rtype: List[List[str]]"""def generateBoard():  # 生成当前解对应的棋盘布局board = []  # 创建一个空列表用于存储最终的棋盘解法for i in range(n):row[queens[i]] = "Q"board.append("".join(row))row[queens[i]] = "."return boarddef solve(row, columns, diagonals1, diagonals2):  # 当前正在放置皇后的行号, 已被占据的列,两条对角线if row == n:  # 递归终止条件,说明所有皇后已放置完毕board = generateBoard()  # 生成棋盘布局,并存入 solutionssolutions.append(board)else:# (1 << n) - 1 生成 n 位全 1,表示所有列都可用,并计算当前可选的列availablePositions = ((1 << n) - 1) & (~(columns | diagonals1 | diagonals2))while availablePositions:  # 遍历所有可选的位置position = availablePositions & (-availablePositions)  # 取 availablePositions 的最低位 1,即当前可选的最左侧列availablePositions = availablePositions & (availablePositions - 1)  # 移除当前选择的位置,以便下次循环选择下一个位置column = bin(position - 1).count("1")  # 计算当前皇后应放置的列索引,统计 1 的个数,得到列索引queens[row] = column  # 记录 row 行的皇后放置在 column 列solve(row + 1, columns | position, (diagonals1 | position) << 1, (diagonals2 | position) >> 1)  # 递归进入下一行,更新列和主副对角线solutions = []  # 存储所有可能的 N 皇后解法queens = [-1] * n  # 记录每行皇后的列索引,初始化为 -1 表示未放置row = ["."] * n  # 构造棋盘行,初始时所有单元格都是 "."solve(0, 0, 0, 0)  # 递归从第 0 行开始尝试放置皇后,初始时所有列和对角线都是可用的return solutions

时间复杂度:O(N!)

空间复杂度:O(N)

作者:力扣官方题解
 


 

相关文章:

python-leetcode 61.N皇后

题目&#xff1a; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解…...

Scala 正则表达式

Scala 正则表达式 引言 正则表达式(Regular Expression)是一种强大的文本处理工具,在Scala编程语言中也有着广泛的应用。Scala正则表达式可以帮助开发者高效地进行字符串匹配、搜索、替换和解析等操作。本文将深入探讨Scala正则表达式的相关知识,包括语法、常用模式、匹配…...

【分布式】分布式限流方案解析

文章目录 固定窗口限流方案​实现方式​优点​缺点​ 滑动窗口限流方案​实现方式​优点​缺点​ 令牌桶限流方案​实现方式​优点​缺点​ 漏斗限流方案​实现方式​优点​缺点​ 在分布式系统蓬勃发展的当下&#xff0c;系统面临的流量挑战日益复杂。为确保系统在高并发场景下…...

Docker 拉取镜像部分成功部分失败?

&#x1f40b; Docker 拉取镜像部分成功部分失败&#xff1f;一次代理配置踩坑记录&#xff01; 最近在部署 Zitadel 身份认证平台的过程中&#xff0c;遇到一个看似“随机”的问题&#xff1a;Docker 有些镜像可以拉取&#xff0c;有些却一直超时失败。最终通过配置 Docker 守…...

Spring AI Alibaba 对话记忆使用

一、对话记忆 (ChatMemory)简介 1、对话记忆介绍 ”大模型的对话记忆”这一概念&#xff0c;根植于人工智能与自然语言处理领域&#xff0c;特别是针对具有深度学习能力的大型语言模型而言&#xff0c;它指的是模型在与用户进行交互式对话过程中&#xff0c;能够追踪、理解并利…...

Mysql从入门到精通day5————子查询精讲

本文主要讲述子查询的几种方法&#xff0c;读者注意体会它们的不同场合的适用情况及功能&#xff0c;本篇文章也融入了小编实践过程遇到的坑&#xff0c;希望读者不要再踩坑 一.带IN关键字的子查询 in关键字可以检测结果集中是否存在某个特定的值&#xff0c;检测成功则执行外…...

QScreen 捕获屏幕(截图)

一、QScreen核心能力解析 硬件信息获取 // 获取主屏幕对象 QScreen* primaryScreen QGuiApplication::primaryScreen();// 输出屏幕参数 qDebug() << "分辨率:" << primaryScreen->size(); qDebug() << "物理尺寸:" << primar…...

Skyeye 云智能制造办公系统 VUE 版本 v3.15.15 发布

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…...

【最新】探索CFD的未来:从OpenFOAM到深度学习,全面解析计算流体力学的顶级资源与前沿技术

计算流体力学(CFD)作为现代工程与科学研究的核心工具,正以前所未有的速度迈向智能化与多物理场耦合的新时代。本文全面梳理了在线学习CFD的顶级资源,涵盖了从传统数值模拟到深度学习驱动的物理信息模型的广泛领域,旨在为研究者、工程师和学生提供一站式参考指南。内容分为…...

【QT5 网络编程示例】TCP 通信

文章目录 TCP 通信 TCP 通信 QT主要通过QTcpSocket 和 QTcpServer两个类实现服务器和客户端的TCP 通信。 QTcpSocket 是 Qt 提供的套接字类&#xff0c;看用于建立、管理和操作 TCP 连接。 常用方法 connectToHost(host, port)&#xff1a;连接到指定服务器。disconnectFro…...

QT五 文件系统,QFile,QfileInfo

总览 QIODevice&#xff1a;所有 I/O 设备类的父类&#xff0c;提供了字节块读写的通用操作以及基本接口&#xff1b;QFileDevice&#xff1a;Qt5新增加的类&#xff0c;提供了有关文件操作的通用实现。QFlie&#xff1a;访问本地文件或者嵌入资源&#xff1b;QTemporaryFile&a…...

OpenMCU(五):STM32F103时钟树初始化分析

概述 本文主要描述了STM32F103初始化过程系统时钟的初始化,主要描述了系统时钟的初始化&#xff0c;AHB总线时钟&#xff0c;APB总线时钟等的初始化。 硬件板卡3d图 时钟树 STM32F103的时钟树&#xff0c;如下所示: 时钟源选择 从STM32F103的时钟树框图&#xff0c;我们可以…...

docker save如何迁移镜像更节省空间?

文章目录 方法一&#xff1a;使用docker save命令方法二&#xff1a;直接保存多个镜像到一个tar文件哪个方法更节省磁盘空间&#xff1f;空间效率对比实际测试示例其他优势结论 如何用脚本迁移加载镜像 迁移镜像时候&#xff0c;往往会碰到基础镜像相同的很多镜像需要迁移&…...

在 UniApp 编译小程序时出现 `:class` 不支持 `getStatusClass(device.deviceStatus)` 语法的报错

在 UniApp 编译小程序时出现 :class 不支持 getStatusClass(device.deviceStatus) 语法的报错&#xff0c;这是因为在非 H5 平台&#xff0c;v-bind:class&#xff08;:class 是其简写形式&#xff09;里直接使用方法调用这种动态计算类名的方式可能不被支持。下面为你提供几种…...

Python之贪心算法

Python实现贪心算法(Greedy Algorithm) 概念 贪心算法是一种在每一步选择中都采取当前状态下最优的选择&#xff0c;从而希望导致结果是全局最优的算法策略。 基本特点 局部最优选择&#xff1a;每一步都做出当前看起来最佳的选择不可回退&#xff1a;一旦做出选择&#xf…...

Javaweb后端AOP记录操作日志

日志记录表 提示词 切入点表达式&#xff0c;注解的方法 查询不用加上日志记录功能...

obsidian ios git同步

首先感谢几位博主的文章&#xff0c;我现在时间久了&#xff0c;未保存原文地址。以下是我自己的执行步骤总结。 应用商店安装 iSH 打开iSH&#xff0c;执行 apk update 安装下面软件&#xff0c;&#xff08;我觉得只安装第一个应该就行&#xff0c;下次测试&#xff09;。 …...

我的机器学习学习之路

学习python的初衷 • hi&#xff0c;今天给朋友们分享一下我是怎么从0基础开始学习机器学习的。 • 我是2023年9月开始下定决心要学python的&#xff0c;目的有两个&#xff0c;一是为了提升自己的技能和价值&#xff0c;二是将所学的知识应用到工作中去&#xff0c;提升工作…...

Python的ASGI Web 服务器之uvicorn

文章目录 什么是uvicornUvicorn 和 uWSGI 对比区别安装 Uvicorn使用示例 什么是uvicorn 官网https://www.uvicorn.org/ Uvicorn 是一个用于 Python 的 ASGI Web 服务器实现。 Until recently Python has lacked a minimal low-level server/application interface for async…...

Spring Boot分布式项目实战:装饰模式的正确打开方式

我在最近参与的物流中台项目中&#xff0c;面对复杂的分布式服务调用场景时&#xff0c;发现装饰模式&#xff08;Decorator Pattern&#xff09;竟成为提升系统扩展性的秘密武器。当某个基础服务接口需要同时支持缓存、日志、限流等多种能力时&#xff0c;传统的继承方式已难以…...

基于WebSocket的金融数据实时推送系统架构设计对接多国金融数据API

基于WebSocket的金融数据实时推送系统架构设计 ——高可用、低延迟与全球化数据支持的技术实践 一、实时数据推送的技术演进 在证券交易、外汇监控、量化策略等场景中&#xff0c;毫秒级延迟可能带来完全不同的业务结果。早期基于HTTP轮询的方案存在三大核心问题&#xff1a…...

Java虚拟机JVM知识点(已完结)

JVM内存模型 介绍下内存模型 根据JDK8的规范&#xff0c;我们的JVM内存模型可以拆分为&#xff1a;程序计数器、Java虚拟机栈、堆、元空间、本地方法栈&#xff0c;还有一部分叫直接内存&#xff0c;属于操作系统的本地内存&#xff0c;也是可以直接操作的。 详细解释一下 程…...

ffuf:一款高效灵活的Web模糊测试利器

在网络安全领域&#xff0c;模糊测试&#xff08;Fuzzing&#xff09;是一种强大的技术&#xff0c;用于发现系统中的隐藏功能、潜在漏洞或未公开资源。而在Web渗透测试中&#xff0c;ffuf&#xff08;Fast Fuzzing Tool&#xff09;凭借其高效性、灵活性和强大的自定义能力&am…...

深入理解二叉树、B树与B+树:原理、应用与实现

文章目录 引言一、二叉树&#xff1a;基础而强大的结构基本概念特性分析Java实现应用场景 二、B树&#xff1a;适合外存的多路平衡树基本概念关键特性查询流程示例Java简化实现典型应用 三、B树&#xff1a;数据库索引的首选核心改进优势分析范围查询示例Java简化实现实际应用 …...

NLP高频面试题(二十八)——Reward model是如何训练的,怎么训练一个比较好的Reward model

在强化学习领域&#xff0c;**奖励模型&#xff08;Reward Model&#xff09;是关键组件之一&#xff0c;旨在通过预测特定行为或输出的奖励值&#xff0c;指导智能体的学习方向。特别是在基于人类反馈的强化学习&#xff08;RLHF&#xff09;**中&#xff0c;奖励模型通过整合…...

基础算法篇(3)(蓝桥杯常考点)-图论

前言 这期是蓝桥杯常考点的最后一章了&#xff0c;其中的dijkstra算法更是蓝桥杯中的高频考点 图的基本相关概念 有向图和无向图 自环和重边 稠密图和稀疏图 对于不带权的图&#xff0c;一条路径的路径长度是指该路径上各边权值的总和 对于带权的图&#xff0c;一条路径长度时…...

【力扣hot100题】(017)矩阵置零

还是挺简单的&#xff0c;使用哈希表记录需要置换的行列即可&#xff0c;这样就可以避免重复节省时间。 class Solution { public:void setZeroes(vector<vector<int>>& matrix) {unordered_set<int> row;unordered_set<int> line;for(int i0;i&l…...

量子退火与机器学习(2):少量实验即可找到新材料,黑盒优化➕量子退火

使用量子退火和因子分解机设计新材料 这篇文章是东京大学的一位博士生的毕业论文中的主要贡献。 结合了黑盒优化和量子退火&#xff0c;是融合的非常好的一篇文章&#xff0c;在此分享给大家。 https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.2.0133…...

Ubuntu 系统上完全卸载 CasaOS

以下是在 Ubuntu 系统上完全卸载 CasaOS 的详细步骤 一.卸载验证 二.卸载步骤 1.停止并禁用 CasaOS 服务 # 停止 CasaOS 核心服务 sudo systemctl stop casaos.service# 禁用开机自启 sudo systemctl disable casaos.service# 确认服务状态&#xff08;应显示 inactive&…...

Flutter敏感词过滤实战:基于AC自动机的高效解决方案

Flutter敏感词过滤实战&#xff1a;基于AC自动机的高效解决方案 在社交、直播、论坛等UGC场景中&#xff0c;敏感词过滤是保障平台安全的关键防线。本文将深入解析基于AC自动机的Flutter敏感词过滤实现方案&#xff0c;通过原理剖析实战代码性能对比&#xff0c;带你打造毫秒级…...

Java Spring Boot 与前端结合打造图书管理系统:技术剖析与实现

目录 运行展示引言系统整体架构后端技术实现后端代码文件前端代码文件1. 项目启动与配置2. 实体类设计3. 控制器设计4. 异常处理 前端技术实现1. 页面布局与样式2. 交互逻辑 系统功能亮点1. 分页功能2. 搜索与筛选功能3. 图书操作功能 总结 运行展示 引言 本文将详细剖析一个基…...

高精度加减乘除 + R 格式

蓝桥账户中心 高精度核心思路&#xff1a;使用vector存储每一位数&#xff0c;倒序存储&#xff0c;即数组从低到高存储的是个位数。 注意减法、乘法、除法都需要去掉前导零 加法&#xff1a; vector<int> add(vector<int> &A, vector<int> &B) …...

鸿蒙编译构建-多目标产物

此文章内容兼容API12&#xff0c;使用harmony next应用开发 前置概念介绍 1&#xff0c;配置文件介绍&#xff1a; build-profile.json5&#xff1a;modules字段&#xff0c;用于记录工程下的模块信息&#xff0c;主要包含模块名称、模块的源码路径以及模块的 target 信息oh-…...

从零开始:Windows 系统中 PowerShell 配置 FFmpeg 的详细步骤

在Windows系统中不想每次都 cd 到FFmpeg目录中应用&#xff0c;现在可以通过PowerShell在任意目录下应用了。 PowerShell 基础概念 跨平台脚本工具 PowerShell 是微软开发的命令行外壳和脚本语言&#xff0c;支持 Windows、Linux 和 macOS 系统。其核心优势在于面向对象的操作…...

Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?

Spring Boot 支持多种日志框架&#xff0c;以下是详细介绍&#xff1a; 支持的日志框架 Logback Logback 是 Log4j 创始人设计的另一个开源日志组件&#xff0c;作为 Log4j 的改良版本&#xff0c;它具有更快的执行速度、更丰富的配置选项以及更好的性能。Logback 分为三个模块…...

【STM32单片机】#4 OLED调试外部中断

主要参考学习资料&#xff1a; B站江协科技 STM32入门教程-2023版 细致讲解 中文字幕 开发资料下载链接&#xff1a;https://pan.baidu.com/s/1h_UjuQKDX9IpP-U1Effbsw?pwddspb 单片机套装&#xff1a;STM32F103C8T6开发板单片机C6T6核心板 实验板最小系统板套件科协 实验&…...

[7-02-02].第15节:生产经验 - 消费者相关操作

Kafka笔记大纲 五、生产经验——分区的分配以及再平衡: 4.1.生产经验——分区的分配以及再平衡 4.2.参数&#xff1a; 5.4.1 Range 以及再平衡...

cmd命令查看电脑的CPU、内存、存储量

目录 获取计算机硬件的相关信息的命令分别的功能结果展示结果说明获取计算机硬件的相关信息的命令 wmic cpu get name wmic memorychip get capacity wmic diskdrive get model,size,mediaType分别的功能 获取计算机中央处理器(CPU)的名称 获取计算机内存(RAM)芯片的容量…...

# OpenCV实现人脸与微笑检测:从图像到视频的实战应用

OpenCV实现人脸与微笑检测&#xff1a;从图像到视频的实战应用 在计算机视觉领域&#xff0c;人脸检测和微笑检测是两个非常有趣且实用的任务。它们广泛应用于智能监控、社交媒体分析、人机交互等多个场景。本文将通过两个代码示例&#xff0c;详细介绍如何使用OpenCV实现人脸…...

k8s EmptyDir(空目录)详解

1. 定义与特性 emptyDir 是 Kubernetes 中一种临时存储卷类型&#xff0c;其生命周期与 Pod 完全绑定。当 Pod 被创建时&#xff0c;emptyDir 会在节点上生成一个空目录&#xff1b;当 Pod 被删除时&#xff0c;该目录及其数据会被永久清除。它主要用于同一 Pod 内多个容器间的…...

学习笔记—数据结构—二叉树(链式)

目录 二叉树&#xff08;链式&#xff09; 概念 结构 初始化 遍历 前序遍历 中序遍历 后序遍历 层序遍历 结点个数 叶子结点个数 第k层结点个数 深度/高度 查找值为x的结点 销毁 判断是否为完整二叉树 总结 头文件Tree.h Tree.c 测试文件test.c 补充文件Qu…...

STM32单片机的桌面宠物机器人(基于HAL库)

效果 基于STM32单片机的桌面宠物机器人 概要 语音模块&#xff1a;ASR PRO&#xff0c;通过天问block软件烧录语音指令 主控芯片&#xff1a;STM32F103C8T6 使用HAL库 屏幕&#xff1a;0.96寸OLED屏&#xff0c;用来显示表情 4个舵机&#xff0c;用来当作四只腿 底部一个面…...

ctf-web:命令注入 -- Cyber Apocalypse CTF 2025 月光的低语 Whispers of the Moonbeam

在瓦莱丽亚繁华的首都中心&#xff0c;Moonbeam Tavern 是一个热闹的耳语、赌注和非法交易的中心。在醉酒顾客的笑声和酒杯的叮当声下&#xff0c;据说这家酒馆不仅提供麦芽酒和欢乐——它是间谍、小偷和那些忠于马拉卡事业的人的秘密聚会场所。 护卫队了解到&#xff0c;在月光…...

如何自动化同义词并使用我们的 Synonyms API 进行上传

作者&#xff1a;来自 Elastic Andre Luiz 了解如何使用 LLM 来自动识别和生成同义词&#xff0c; 使术语可以通过程序方式加载到 Elasticsearch 同义词 API 中。 提高搜索结果的质量对于提供高效的用户体验至关重要。优化搜索的一种方法是通过同义词自动扩展查询词。这样可以更…...

HCIA—— 31 HTTP的报文、请求响应报文、方法、URI和URL

学习目标&#xff1a; HTTP的报文、请求响应报文、方法、URI和URL 学习内容&#xff1a; HTTP报文——请求报文和响应报文&#xff1b;HTTP报文结构HTTP的---请求报文首部和响应报文首部方法URI和URL 目录 1.HTTP报文 1)HTTP的报文——请求报文和响应报文 HTTP协议的请求和响…...

第五十三章 Spring之假如让你来写Boot——环境篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…...

Spring Boot 整合 RabbitMQ:注解声明队列与交换机详解

RabbitMQ 作为一款高性能的消息中间件&#xff0c;在分布式系统中广泛应用。Spring Boot 通过 spring-boot-starter-amqp 提供了对 RabbitMQ 的无缝集成&#xff0c;开发者可以借助注解快速声明队列、交换机及绑定规则&#xff0c;极大简化了配置流程。本文将通过代码示例和原理…...

【分布式】深入剖析 Sentinel 限流:原理、实现

在当今分布式系统盛行的时代&#xff0c;流量的剧增给系统稳定性带来了巨大挑战。Sentinel 作为一款强大的流量控制组件&#xff0c;在保障系统平稳运行方面发挥着关键作用。本文将深入探讨 Sentinel 限流的原理、实现方案以及其优缺点&#xff0c;助力开发者更好地运用这一工具…...

uniapp用法--uni.navigateTo 使用与参数携带的方式示例(包含复杂类型参数)

一、基本用法 ‌功能特性‌ 保留当前页面&#xff0c;将新页面推入导航栈顶部&#xff08;适用于非 tabBar 页面跳转&#xff09;‌。可通过 uni.navigateBack 返回原页面‌34。 ‌代码示例 uni.navigateTo({url: /pages/detail/detail?keyvalue // 目标页面路径及参数 });…...

【编译、链接与构建详解】Makefile 与 CMakeLists 的作用

【编译、链接与构建详解】Makefile 与 CMakeLists 的作用 前言源代码&#xff08;.c、.cpp&#xff09;编译编译的本质编辑的结果编译器&#xff08;GCC、G、NVCC 等&#xff09; 目标文件&#xff08;.o&#xff09;什么是 .o 目标文件为什么单个 .o 目标文件不能直接执行&…...