按照情侣对数来构造无向图,是情侣的话自身构成一个图的节点与其他节点没有边连接
不是情侣的话就和其他情侣中的人有边连接,如果想要交换坐在一起的话就需要把这个边断开
所以断开的边的个数就是需要交换的次数,断开的边数等于情侣对的总数减去连通分量的个数

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. 情侣牵手相关推荐

  1. Java实现 LeetCode 765 情侣牵手(并查集 || 暴力)

    765. 情侣牵手 N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. 一次交换可选择任意两人,让他们站起来交换座位. 人和座位用 0 ...

  2. LeetCode——765. 情侣牵手(Couples Holding Hands)——分析及代码(Java)

    LeetCode--765. 情侣牵手[Couples Holding Hands]--分析及代码[Java] 一.题目 二.分析及代码 1. 并查集 (1)思路 (2)代码 (3)结果 三.其他 一 ...

  3. 力扣题库-765.情侣牵手 最优解法

    题目描述 情侣牵手 N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. 一次交换可选择任意两人,让他们站起来交换座位. 人和座位用 0 ...

  4. 【力扣】765. 情侣牵手

    以下为力扣的官方题解 765. 情侣牵手 题目 示例1 示例2 说明 官方题解 思路一 并查集 代码 复杂度分析 思路二 广度优先搜索 代码 复杂度分析 题目 NNN 对情侣坐在连续排列的 2N2N2 ...

  5. 765.情侣牵手问题 leetcode

    情侣牵手问题 解法一: 贪心 这个解题方法就是从0开始遍历,遍历的时候看看右边的是不是自己的对象,如果不是,就去找对象(把右边的人和自己对象交换位置).每次判断完后i加2. 怎么判断? 根据题意, 如 ...

  6. 765. 情侣牵手(贪心思想)

    情侣牵手 N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. 一次交换可选择任意两人,让他们站起来交换座位. 人和座位用 0 到 2N ...

  7. Leetcode 765. 情侣牵手 C++

    Leetcode 765. 情侣牵手 题目 N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. 一次交换可选择任意两人,让他们站起来交 ...

  8. LeetCode -- 765.情侣牵手

    链接:情侣牵手 描述:N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. 一次交换可选择任意两人,让他们站起来交换座位. 人和座位用 ...

  9. LeetCode 765. 情侣牵手(贪心)

    1. 题目 N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. 一次交换可选择任意两人,让他们站起来交换座位. 人和座位用 0 到 2 ...

最新文章

  1. 初级开发人员的缺点_这是我想放弃初级开发人员时所做的事情
  2. Ubuntu安装python3.7,并将python链接指向python3.7
  3. 基础正规表示法字符汇整 (characters)
  4. MCMC笔记:齐次马尔可夫链
  5. node 跨域请求设置
  6. 3、MySQL查看存储过程
  7. heroku能用mysql吗_heroku连接到mysql数据库
  8. python中的break+while break+for
  9. 次梯度法matlab代码,实例:连续化次梯度法解 LASSO 问题
  10. android 居右属性,使用layoutDirection属性设置布局靠左或靠右
  11. 解决The valid characters are defined in RFC 7230 and RFC 3986错误问题
  12. 斯大林格勒拖拉机厂LCA项目研制成功
  13. 阶段3 1.Mybatis_08.动态SQL_02.mybatis中动态sql语句-where标签的使用
  14. 扶贫计算机考试试题,计算机基础知识试题1.doc
  15. adb 黑域app_黑域app怎么用?新版黑域app使用图文教程
  16. 03.豆豆的《背叛》与《天道》
  17. 公司股权分配协议范文
  18. c语言花园自动喷淋系统,智慧小区花园自动浇灌喷淋控制系统
  19. 什么是合理避税?合理避税的定义是什么?
  20. dp怎么接显示器和主机_电脑dp接口能单独接显示器吗

热门文章

  1. 基于深度学习的菠萝实时三维坐标定位项目
  2. 道高一尺魔高一丈,记强大的boost regex
  3. 全国企业信用信息公示系统 查公司信息
  4. vue实现实时直播 摄像头实现实时直播 dplayer+flv flv.js
  5. 【LeetCode】第643题——子数组最大平均数I(难度:简单)
  6. .net7二维码跨平台完美解决方案
  7. 飞塔防火墙的配置与策略
  8. 我的人生就是一次次世界杯串起来的
  9. 如何从手机上恢复误删的微信聊天记录
  10. 解决 VMware 中安装虚拟机时屏幕显示不全的问题