没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
**
🍭
更多精彩内容,欢迎关注:公众号 / Github / LeetCode / 知乎 **
噔噔噔噔,这是公众号「噔噔噔噔,这是公众号「宫水三叶的刷宫水三叶的刷题题日日记记」的原」的原创专题创专题「并查集」合集。「并查集」合集。
本合集更新时间本合集更新时间为为 2021-10-07,大概每,大概每 2-4 周会集中更新一次。周会集中更新一次。关注公众号,后台回复「并查注公众号,后台回复「并查
集」即可获取最新下集」即可获取最新下载链载链接。接。
💡💡
下面介下面介绍绍使用本合集的最佳使用实使用本合集的最佳使用实践::
学学习习算法:算法:
1. 打开在线目录(Github 版 & Gitee 版);
2. 从侧边栏的类别目录找到「并查集」;
3. 按照「推荐指数」从大到小进行刷题,「推荐指数」相同,则按照「难度」从易到
难进行刷题‘
4. 拿到题号之后,回到本合集进行检索。
维维持熟持熟练练度:度:
1. 按照本合集「从上往下」进行刷题。
学学习习过程中遇到任何困过程中遇到任何困难难,欢迎加入「每日一,欢迎加入「每日一题题打卡打卡 QQ 群:群:703311589」」进进行交流行交流
🍭🍭🍭🍭🍭🍭
**
🍭
更多精彩内容,欢迎关注:公众号 / Github / LeetCode / 知乎 **
题题目描述目描述
这是 LeetCode 上的 765. 情侣情侣牵牵手手 ,难度为 困困难难。
Tag : 「并查集」、「贪心」
N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手。 计算最少交换座位的次数,以便
每对情侣可以并肩坐在一起。 一次交换可选择任意两人,让他们站起来交换座位。
人和座位用 0 到 2N-1 的整数表示,情侣们按顺序编号,第一对是 (0, 1),第二对是 (2, 3),以此
类推,最后一对是 (2N-2, 2N-1)。
这些情侣的初始座位 row[i] 是由最初始坐在第 i 个座位上的人决定的。
示例 1:
输入: row = [0, 2, 1, 3]
输出: 1
解释: 我们只需要交换row[1]和row[2]的位置即可。
示例 2:
输入: row = [3, 2, 0, 1]
输出: 0
解释: 无需交换座位,所有的情侣都已经可以手牵手了。
说明:
• len(row) 是偶数且数值在 [4, 60]范围内。
• 可以保证row 是序列 0...len(row)-1 的一个全排列。
并查集并查集
首先,我们总是以「情侣对」为单位进行设想:
1. 当有两对情侣相互坐错了位置,ta们两对之间形成了一个环。需要进行一次交换,
使得每队情侣独立(相互牵手)
2. 如果三对情侣相互坐错了位置,ta们三对之间形成了一个环,需要进行两次交换,
使得每队情侣独立(相互牵手)
3. 如果四对情侣相互坐错了位置,ta们四对之间形成了一个环,需要进行三次交换,
使得每队情侣独立(相互牵手)
也就是说,如果我们有 k 对情侣形成了错误环,需要交换 k - 1 次才能让情侣牵手。
于是于是问题转问题转化成化成 n / 2 对情侣中,有多少个这样的环。对情侣中,有多少个这样的环。
可以直接使用「并查集」来做。
由于 0和1配对、2和3配对 … 因此互为情侣的两个编号除以 2 对应同一个数字,可直接作为它
们的「情侣组」编号:
class Solution {
int[] p = new int[70];
void union(int a, int b) {
p[find(a)] = p[find(b)];
}
int find(int x) {
if (p[x] != x) p[x] = find(p[x]);
return p[x];
}
public int minSwapsCouples(int[] row) {
int n = row.length, m = n / 2;
for (int i = 0; i < m; i++) p[i] = i;
for (int i = 0; i < n; i += 2) union(row[i] / 2, row[i + 1] / 2);
int cnt = 0;
for (int i = 0; i < m; i++) {
if (i == find(i)) cnt++;
}
return m - cnt;
}
}
• 时间复杂度:O(n)
• 空间复杂度:O(n)
贪贪心心
还是以「情侣对」为单位进行分析:
由于题目保证有解,我们也可以从前往后(每两格作为一步)处理,对于某一个位置而言,如果
下一个位置不是应该出现的情侣的话。
则对下一个位置进行交换。
同时为了方便我们找到某个值的下标,需要先对 row 进行预处理(可以使用哈希表或数组)。
剩余21页未读,继续阅读
光与火花
- 粉丝: 25
- 资源: 335
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0