并查集:Leetcode765 情侣牵手
n 对情侣坐在连续排列的 2n 个座位上,想要牵到对方的手。
人和座位由一个整数数组 row 表示,其中 row[i] 是坐在第 i 个座位上的人的 ID。情侣们按顺序编号,第一对是 (0, 1),第二对是 (2, 3),以此类推,最后一对是 (2n-2, 2n-1)。
返回 最少交换座位的次数,以便每对情侣可以并肩坐在一起。 每次交换可选择任意两人,让他们站起来交换座位。
示例 1:
输入: row = [0,2,1,3] 输出: 1 解释: 只需要交换row[1]和row[2]的位置即可。
示例 2:
输入: row = [3,2,0,1] 输出: 0 解释: 无需交换座位,所有的情侣都已经可以手牵手了。
题解:把2n个作为分为n个组,每个组最后做一对情侣,由题可得 编号/2 相同的人是一对情侣。
如果把一对情侣看成一个点,把一个座位看成一条边,可以把输入转化成一个图。[0,2,1,3] 转化为情侣:[0 1 0 1]。
所以01之间形成一个环。
经过枚举,可以发现形成的图是一个或几个环。最终的结果是要变成n-1个自环。
规律:
如果每个座位内交换两个人位置,那么环的个数不变。
如果不同座位内交换两个人位置,那么环的个数加1。
所以只要求一开始的环的个数即可。
使用并查集来求图中环的个数(因为图中只有环?)
初始化每对情侣都指向自己。?
??
class Solution {
public:vector<int> p;int find(int x){if(p[x]!=x)p[x]=find(p[x]);return p[x];}int minSwapsCouples(vector<int>& row) {int n = row.size()/2;for(int i = 0;i < n;i++) p.push_back(i);int cnt = 0;for(int i = 0;i<n*2;i+=2){int a = row[i]/2;int b = row[i+1]/2;if(find(a)!=find(b)){p[find(a)]=find(b);cnt++;}}return cnt;}
};
相关文章:
并查集:Leetcode765 情侣牵手
n 对情侣坐在连续排列的 2n 个座位上,想要牵到对方的手。 人和座位由一个整数数组 row 表示,其中 row[i] 是坐在第 i 个座位上的人的 ID。情侣们按顺序编号,第一对是 (0, 1),第二对是 (2, 3),以此类推,最后…...
如何设计一个网盘系统的架构
1. 概述 现代生活中已经离不开网盘,比如百度网盘。在使用网盘的过程中,有没有想过它是如何工作的?在本文中,我们将讨论如何设计像百度网盘这样的系统的基础架构。 2. 系统需求 2.1. 功能性需求 用户能够上传照片/文件。用户能…...
【代码随想录】算法训练计划17
1、 110.平衡二叉树 题目: 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 思路: 经典后序遍历,感…...
“护肤品销售策略:从“免费拼团”到“3人回本大放送”“
有一个销售护肤品的团队,他们家399块钱一套的护肤品,他们在小程序这一个渠道,只用了23天的时间,就卖出去了2000多万的营业额,你敢信吗? 那么23天的时间,他们是怎么卖出去2000多万的呢࿱…...
uniapp和vue3+ts开发小程序,使用vscode提示声明变量冲突解决办法
在uniapp中,我们可能经常会遇到需要在不用的环境中使用不同变量的场景,例如在VUE3中的小程序环境使用下面的方式导入echarts: const echarts require(../../static/echarts.min); 如果不是小程序环境则使用下面的方式导入echartsÿ…...
CCLink转Modbus TCP网关_MODBUS报文配置
兴达易控CCLink转Modbus TCP网关是一种功能强大的设备,可实现两个不同通信协议之间的无缝对接。它能够将CCLink协议转换为Modbus TCP协议,并通过报文配置实现灵活的通信设置。兴达易控CCLink转Modbus TCP网关可以轻松实现CCLink和Modbus TCP之间的数据转…...
【开源】基于Vue.js的大学兼职教师管理系统的设计和实现
目录 一、摘要1.1 项目介绍1.2 项目详细录屏 二、研究内容三、界面展示3.1 登录注册3.2 学生教师管理3.3 课程管理模块3.4 授课管理模块3.5 课程考勤模块3.6 课程评价模块3.7 课程成绩模块3.8 可视化图表 四、免责说明 一、摘要 1.1 项目介绍 大学兼职教师管理系统࿰…...
Mysql数据库 14.SQL语言 视图
一、视图的概念 视图:就是由数据库中一张或多张表根据特定的条件查询出的数据狗造成的虚拟表 二、视图的作用 安全性,简单性 三、视图的语法 语法 create view 视图表 as select_statement; 代码实现 #创建视图 将查询结果创建称为视图&#x…...
【Acwing171】送礼物(双向dfs)题解
本题思路来源于acwing算法提高课 题目描述 看本文需要准备的知识 1.二分(强烈推荐文章:一分钟学会二分模板 2.dfs基本思想,了解“剪枝”这个术语 思路分析 首先这道题目看起来就是一个01背包,但是如果直接用01背包去做&…...
机器学习---多分类SVM、支持向量机分类
1. 多分类SVM 1.1 基本思想 Grammer-singer多分类支持向量机的出发点是直接用超平面把样本空间划分成M个区域,其 中每个区域对应一个类别的输入。如下例,用从原点出发的M条射线把平面分成M个区域,下图画 出了M3的情形: 1.2 问题…...
玩转Linux基本指令
> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:牢记Linux的基本指令。 > 毒鸡汤:挫…...
【开源分享】国内可用的免费安卓GPT语音助手 - 可音量键唤起,可联网
写在前面:这是一个我写的开源GPT语音助手,不收钱,只求Star! 简要介绍 这是一个基于ChatGPT的安卓端语音助手,允许用户通过手机音量键从任意界面唤起并直接进行语音交流,用最快捷的方式询问并获取回复 使用效果 一、基…...
什么是安全平行切面
安全平行切面的定义 通过嵌入在端—管—云内部的各层次切点,使得安全管控与业务逻辑解耦,并通过标准化的接口为安全业务提供内视和干预能力的安全基础设施。安全平行切面是一种创新的安全体系思想,是实现“原生安全”的一条可行路径。 为什…...
Git 入门使用 —— 建库、代码上下传、常用命令
目录 一、Git 入门 1.1 Git简介 1.2 Git安装 1.3 创建码云仓库 二、Git 使用 2.1 git初始化操作 2.2 代码上传 2.3 代码下载 2.4 代码更新 2.4.1 仓库管理者 2.4.1 仓库使用者 三、Git 常用命令 一、Git 入门 1.1 Git简介 Git是一个开源的分布式版本控制系统&am…...
HTML5学习系列之简单使用1
HTML5学习系列之简单使用1 前言基础显示学习定义网页标题定义网页元信息定义网页元信息定义文档结构div元素di和classtitlerole注释 总结 前言 下班加班期间的简单学习。 基础显示学习 定义网页标题 <html lang"en"> <head> <title>从今天开始努…...
计算机网络第一章(计算机网络开篇)
目录 一.什么是计算机网络1.0 何为计算机网络1.1 什么是Internet?1.2 互联网与互连网1.3 互联网基础结构发展的三个阶段 二.什么是网络协议2.1 协议的三要素2.2 internet协议标准 三. 互联网的组成3.1 边缘部分3.11 端系统之间的通信 3.2 核心部分3.21 数据交换技术 四. 计算机…...
百度秋招突击手册面试算法题:三数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 …...
归并排序 图解 递归 + 非递归 + 笔记
前置知识:讲解019-算法笔试中处理输入和输出,讲解020-递归和master公式 (1)左部分排好序,右部分排好序,利用merge过程让左右整体有序(2)merge过程:谁小拷贝谁,直到左右两部分所有的数字耗尽(3)递归实现和非递归实现(4…...
2023 年最好的 Android 系统修复/刷机应用程序和软件
任何 Android 设备要顺利运行,其操作系统必须运行良好。幸运的是,对于大多数 Android 用户来说,这是不间断的。设备运行良好,打电话、共享文档等都没有问题。尽管如此,Android 操作系统可能会停止运行。这可能是由于特…...
Linux下内网穿透实现云原生观测分析工具的远程访问
📑前言 本文主要是Linux下内网穿透实现云原生观测分析工具的远程访问设置的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 &…...
用STM32玩转PS2无线手柄:从时序图到按键读取的保姆级代码解析
STM32与PS2无线手柄深度实战:时序解析与按键捕获全流程 第一次拿到PS2手柄想接入STM32时,我盯着那四根线发愣——CLK、CMD、DAT、CS,看似简单的接口背后藏着怎样的通信奥秘?作为嵌入式开发者,理解并实现这种专有协议是…...
第九章:我是如何剖析 Claude Code 的 CLI 里的安全沙盒与指令拦截机制的
大家好。又来了,好东西真的太多了,没办法。 比如有个问题:“Claude Code 既然能在电脑上执行命令行,万一大模型抽风,来一句 rm -rf /,或者偷偷把数据库给 DROP TABLE 了,那不就全完了࿱…...
GHelper轻量级控制工具:三步解决华硕笔记本性能管理难题
GHelper轻量级控制工具:三步解决华硕笔记本性能管理难题 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, …...
为什么90%的职场人低估了AGI的就业穿透力?——基于神经符号系统演进的5级替代模型分析
第一章:AGI与就业市场的未来变化 2026奇点智能技术大会(https://ml-summit.org) 通用人工智能(AGI)的实质性突破正从理论推演加速迈向工程落地,其对就业结构的影响已不再是远期预测,而是正在发生的系统性重构。不同于…...
用Python爬虫+AI翻译,我自动化复习完了《新概念英语3》的L11-L15
用Python爬虫AI翻译构建自动化英语学习系统 每次翻开《新概念英语》的泛黄书页,总能看到当年用荧光笔标记的密密麻麻的笔记。这种传统学习方式虽然有效,但在数字时代显得效率低下。最近我尝试用Python技术栈重构学习流程,意外发现爬虫抓取AI翻…...
深度解析UnityLive2DExtractor:高效提取Live2D Cubism 3资源的专业方案
深度解析UnityLive2DExtractor:高效提取Live2D Cubism 3资源的专业方案 【免费下载链接】UnityLive2DExtractor Unity Live2D Cubism 3 Extractor 项目地址: https://gitcode.com/gh_mirrors/un/UnityLive2DExtractor UnityLive2DExtractor是一款专门用于从U…...
ABAP BAPI_SALESORDER_CREATEFROMDAT2实战避坑:从常见报错到源码解析
1. 为什么BAPI_SALESORDER_CREATEFROMDAT2总让你头疼? 每次调用BAPI_SALESORDER_CREATEFROMDAT2创建销售订单时,是不是总有种"明明参数都填了,为什么还是报错"的无力感?这个BAPI就像个挑剔的美食家,少放一粒…...
代码随想录算法训练营第二十九天|134、加油站 135、分发糖果 860、柠檬水找零 406、根据身高重建队列
目录 134. 加油站 题目描述 题目例子 解题思路 135. 分发糖果 题目描述 题目例子 解题思路 860. 柠檬水找零 - 力扣(LeetCode) 题目描述 题目例子 解题思路 406. 根据身高重建队列 - 力扣(LeetCode) 题目描述 题目…...
AGI伦理不是选择题,而是生存题:从欧盟AI Act到中国《生成式AI服务管理办法》,9类高危应用场景避坑指南
SITS2026分享:AGI的伦理与社会影响 第一章:AGI伦理的范式跃迁:从技术合规到文明存续 2026奇点智能技术大会(https://ml-summit.org) 当AGI系统首次在无监督条件下完成跨模态文明推演、自主重构全球气候治理协议并反向优化人类制度熵值时&a…...
MATLAB神经网络拟合工具箱实战:从数据导入到模型部署的完整指南
1. 数据准备与导入 用MATLAB做神经网络回归的第一步,就是把数据整理好塞进工作区。我见过太多新手在这第一步就栽跟头——要么数据格式不对,要么变量没对齐,结果后面步步出错。这里分享几个我踩过坑才总结出来的经验。 首先说数据格式。虽然工…...
