LC765. 情侣牵手
按照情侣对数来构造无向图,是情侣的话自身构成一个图的节点与其他节点没有边连接
不是情侣的话就和其他情侣中的人有边连接,如果想要交换坐在一起的话就需要把这个边断开
所以断开的边的个数就是需要交换的次数,断开的边数等于情侣对的总数减去连通分量的个数
def minSwapsCouples(self, row):""":type row: List[int]:rtype: int"""mp = [[] for i in range(len(row) // 2)]for i in range(0, len(row), 2): #邻接表储存情侣座位关系x, y = row[i] // 2, row[i + 1] // 2 #注意应该是无向图mp[x].append(y)mp[y].append(x)visited = set()num = 0for i in range(len(row)//2): #找连通分量if i in visited: continuevisited.add(i) #记录访问过的节点queue = deque([i])while queue: #广度优先遍历x = queue.popleft()for j in mp[x]:if j not in visited:visited.add(j)queue.append(j)num += 1 #找完了一个连通分量return len(row)//2 - num #所有的情侣对数减去连通分量数
并查集计算连通分量个数
def minSwapsCouples(self, row):""":type row: List[int]:rtype: int"""n = len(row)m = len(row) // 2self.count = mparent = list(range(m))def find(x):if x != parent[x]:parent[x] = find(parent[x])return parent[x]def union(index1,index2):if find(index1) != find(index2):parent[find(index1)] = find(index2)self.count -= 1for i in range(0,n,2):union(row[i]//2,row[i+1]//2)return m - self.count
LC765. 情侣牵手相关推荐
- Java实现 LeetCode 765 情侣牵手(并查集 || 暴力)
765. 情侣牵手 N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. 一次交换可选择任意两人,让他们站起来交换座位. 人和座位用 0 ...
- LeetCode——765. 情侣牵手(Couples Holding Hands)——分析及代码(Java)
LeetCode--765. 情侣牵手[Couples Holding Hands]--分析及代码[Java] 一.题目 二.分析及代码 1. 并查集 (1)思路 (2)代码 (3)结果 三.其他 一 ...
- 力扣题库-765.情侣牵手 最优解法
题目描述 情侣牵手 N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. 一次交换可选择任意两人,让他们站起来交换座位. 人和座位用 0 ...
- 【力扣】765. 情侣牵手
以下为力扣的官方题解 765. 情侣牵手 题目 示例1 示例2 说明 官方题解 思路一 并查集 代码 复杂度分析 思路二 广度优先搜索 代码 复杂度分析 题目 NNN 对情侣坐在连续排列的 2N2N2 ...
- 765.情侣牵手问题 leetcode
情侣牵手问题 解法一: 贪心 这个解题方法就是从0开始遍历,遍历的时候看看右边的是不是自己的对象,如果不是,就去找对象(把右边的人和自己对象交换位置).每次判断完后i加2. 怎么判断? 根据题意, 如 ...
- 765. 情侣牵手(贪心思想)
情侣牵手 N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. 一次交换可选择任意两人,让他们站起来交换座位. 人和座位用 0 到 2N ...
- Leetcode 765. 情侣牵手 C++
Leetcode 765. 情侣牵手 题目 N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. 一次交换可选择任意两人,让他们站起来交 ...
- LeetCode -- 765.情侣牵手
链接:情侣牵手 描述:N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. 一次交换可选择任意两人,让他们站起来交换座位. 人和座位用 ...
- LeetCode 765. 情侣牵手(贪心)
1. 题目 N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. 一次交换可选择任意两人,让他们站起来交换座位. 人和座位用 0 到 2 ...
最新文章
- 初级开发人员的缺点_这是我想放弃初级开发人员时所做的事情
- Ubuntu安装python3.7,并将python链接指向python3.7
- 基础正规表示法字符汇整 (characters)
- MCMC笔记:齐次马尔可夫链
- node 跨域请求设置
- 3、MySQL查看存储过程
- heroku能用mysql吗_heroku连接到mysql数据库
- python中的break+while break+for
- 次梯度法matlab代码,实例:连续化次梯度法解 LASSO 问题
- android 居右属性,使用layoutDirection属性设置布局靠左或靠右
- 解决The valid characters are defined in RFC 7230 and RFC 3986错误问题
- 斯大林格勒拖拉机厂LCA项目研制成功
- 阶段3 1.Mybatis_08.动态SQL_02.mybatis中动态sql语句-where标签的使用
- 扶贫计算机考试试题,计算机基础知识试题1.doc
- adb 黑域app_黑域app怎么用?新版黑域app使用图文教程
- 03.豆豆的《背叛》与《天道》
- 公司股权分配协议范文
- c语言花园自动喷淋系统,智慧小区花园自动浇灌喷淋控制系统
- 什么是合理避税?合理避税的定义是什么?
- dp怎么接显示器和主机_电脑dp接口能单独接显示器吗