已解决
【LeetCode】每日一题 2023_11_11 情侣牵手(并查集/贪心)
来自网友在路上 174874提问 提问时间:2023-11-11 14:08:27阅读次数: 74
最佳答案 问答题库748位专家为你答疑解惑
文章目录
- 刷题前唠嗑
- 题目:情侣牵手
- 题目描述
- 代码与解题思路
- 偷看大佬题解
- 结语
刷题前唠嗑
LeetCode? 启动!!!
好好好,这么玩是吧,双十一出道情侣牵手
题目:情侣牵手
题目链接:765. 情侣牵手
题目描述
代码与解题思路
func minSwapsCouples(row []int) (ans int) {n := len(row)index := make([]int, n)for i := 0; i < n; i++ {index[row[i]] = i // 存下标}for i := 0; i < n-1; i+=2 {a := row[i]b := a^1 // 无论 a 位置是奇数还是偶数, a^1 的结果求出的都是 a 的情侣 b 的值if row[i+1] != b {// src 是 a 旁边位置的人的下标, tar 是 a 的情侣 b 的坐标(之前存在下标数组中了)src, tar := i+1, index[b]// 这两步是将 src 和 tar 在下标数组的下标位置交换index[row[tar]] = srcindex[row[src]] = tarswap(&row[tar], &row[src]) // 交换情侣的位置ans++}}return ans
}func swap(a, b *int) {*a, *b = *b, *a
}
这道题虽然是 hard,但是做起来没有这么 hard,我的代码思路如下:
这里先盗用一下 LeetCode 官解的图:
首先我们要理解上面这张图的情况,最少交换次数=情侣对数-1
- 创建一个下标数组,用来存每个人的下标
- a 代表当前位置的人,b 代表 a 对应的情侣
- 如果 a 和 b 不是一对情侣,那就通过下标数组找到 a 对应的情侣,并将他交换到 a 的旁边;这样子遍历一遍 row 数组,就能将 row 中所有的情侣都组好队(因为遍历了一遍,对于每一个不是情侣的组合都进行了寻找和交换的操作)
- 每次进行寻找和交换就让 ans++ 计数即可
题解说这是贪心(那就当他是贪心吧~)因为我其实不太会贪心,所以看不出来。
偷看大佬题解
题解说可以用并查集来做,实际上我没有学过图论,所以。。。我也不会并查集啦,那就当没看见吧~
结语
今天就当是扩展思路涨见识了~
查看全文
99%的人还看了
相似问题
- 【PyQt小知识 - 3】: QComboBox下拉框内容的设置和更新、默认值的设置、值和下标的获取
- 关于js中数组push之后长度明明有但是获取长度和随意的数组下标的时候不正常的问题
- 【C语言】数组下标为啥从0开始?下标越界访问一定报错吗?
- 寻找二维数组的最大值和对应下标 | C语言代码
- C++可以使用负数作为下标索引
- Python---字符串在计算机底层的存储形式---涉及索引下标
- 在excel中如何打出上标、下标
- 介绍一下标准的 CSS 的盒子模型?低版本 IE 的盒子模型有什么不同的?
- 代码随想录算法训练营二十四期第九天|LeetCode28. 找出字符串中第一个匹配项的下标、LeetCode459. 重复的子字符串
- axios的get请求时数组参数没有下标
猜你感兴趣
版权申明
本文"【LeetCode】每日一题 2023_11_11 情侣牵手(并查集/贪心)":http://eshow365.cn/6-37662-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!