文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你两个整数数组 source 和 target ,长度都是 n 。
还有一个数组 allowedSwaps ,其中每个 allowedSwaps[i] = [ai, bi] 表示你可以交换数组 source 中下标为 ai 和 bi(下标从 0 开始)的两个元素。
注意,你可以按 任意 顺序 多次 交换一对特定下标指向的元素。

相同长度的两个数组 source 和 target 间的 汉明距离 是元素不同的下标数量。
形式上,其值等于满足 source[i] != target[i] (下标从 0 开始)的下标 i(0 <= i <= n-1)的数量。

在对数组 source 执行 任意 数量的交换操作后,返回 source 和 target 间的 最小汉明距离

示例 1:
输入:source = [1,2,3,4], target = [2,1,4,5],
allowedSwaps = [[0,1],[2,3]]
输出:1
解释:source 可以按下述方式转换:
- 交换下标 0 和 1 指向的元素:source = [2,1,3,4]
- 交换下标 2 和 3 指向的元素:source = [2,1,4,3]
source 和 target 间的汉明距离是 1 ,
二者有 1 处元素不同,在下标 3 。示例 2:
输入:source = [1,2,3,4], target = [1,3,2,4],
allowedSwaps = []
输出:2
解释:不能对 source 执行交换操作。
source 和 target 间的汉明距离是 2 ,
二者有 2 处元素不同,在下标 1 和下标 2 。示例 3:
输入:source = [5,1,2,4,3], target = [1,5,4,2,3],
allowedSwaps = [[0,4],[4,2],[1,3],[1,4]]
输出:0提示:
n == source.length == target.length
1 <= n <= 10^5
1 <= source[i], target[i] <= 10^5
0 <= allowedSwaps.length <= 10^5
allowedSwaps[i].length == 2
0 <= ai, bi <= n - 1
ai != bi

https://leetcode-cn.com/problems/minimize-hamming-distance-after-swap-operations/

2. 解题

并查集学习,请点击

  • 对可以交换的下标位置,使用并查集进行合并
  • 对 source 数组中每个位置的数,属于哪个集合,计数
  • 遍历 target 数组,对每个位置的数,查看对应集合,看是否存在,记录数量,并更新计数
class dsu // 并查集
{public:vector<int> f;dsu(int n){f.resize(n);for(int i = 0; i < n; i++)f[i] = i;}void merge(int a, int b){int fa = find(a);int fb = find(b);f[fa] = fb;}int find(int a){if(a == f[a])return a;return f[a] = find(f[a]);}
};
class Solution {public:int minimumHammingDistance(vector<int>& source, vector<int>& target, vector<vector<int>>& allowedSwaps) {int n = source.size();dsu u(n);for(auto& a : allowedSwaps)u.merge(a[0], a[1]);int same = 0;unordered_map<int,unordered_map<int,int>> m;for(int i = 0; i < n; i++){int fa = u.find(i);m[fa][source[i]]++;}for(int i = 0; i < n; i++){int fa = u.find(i);if(m[fa][target[i]] > 0){same++;m[fa][target[i]]--;}}return n-same;}
};

908 ms 145.2 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1722. 执行交换操作后的最小汉明距离(并查集)相关推荐

  1. LeetCode 1625. 执行操作后字典序最小的字符串(BFS)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个字符串 s 以及两个整数 a 和 b .其中,字符串 s 的长度为偶数,且仅由数字 0 到 9 组成. 你可以在 s 上按任意顺序多次执行下面两个 ...

  2. 滑动窗口:给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。

    一.问题描述 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次.在执行上述操作后,找到包含重复字母的最长子串的长度. 注意: 字符串长度 和 k ...

  3. svn执行update操作后出现:Error : Previous operation has not finished; run 'cleanup' if it was interrupted.

    svn执行update操作后出现:Error : Previous operation has not finished; run 'cleanup' if it was interrupted. s ...

  4. 练习2-7 编写一个函数invert(x,p,n),该函数返回对x执行下列操作后的结果:将x从第p位开始的n个(二进制)位求反(即1变成0,0变成1),x的其余各位保持不变。

    练习2-7 编写一个函数invert(x,p,n),该函数返回对x执行下列操作后的结果:将x从第p位开始的n个(二进制)位求反(即1变成0,0变成1),x的其余各位保持不变. #include< ...

  5. 练习2-6 编写一个函数setbits(x, p ,n, y),该函数返回对x执行下列操作后的结果值: 将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。

    练习2-6 编写一个函数setbits(x, p ,n, y),该函数返回对x执行下列操作后的结果值: 将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变. 参考代码如 ...

  6. Python编程语言学习:for循环实现对多个不同的DataFrame数据执行相同操作(可用于对分开的测试集、训练集实现执行相同逻辑任务)

    Python编程语言学习:for循环实现对多个不同的DataFrame数据执行相同操作(可用于对分开的测试集.训练集实现执行相同逻辑任务) 目录

  7. LeetCode 2202. K 次操作后最大化顶端元素

    文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始的整数数组 nums ,它表示一个 栈 ,其中 nums[0] 是栈顶的元素. 每一次操作中,你可以执行以下操作 之一 : 如果栈 ...

  8. LeetCode 1799. N 次操作后的最大分数和(回溯 / 状态压缩DP)

    文章目录 1. 题目 2. 解题 2.1 错误解 2.2 回溯超时解 2.3 回溯通过 2.4 状态压缩DP 1. 题目 给你 nums ,它是一个大小为 2 * n 的正整数数组. 你必须对这个数组 ...

  9. leetcode:2382. 删除操作后的最大子段和【逆向思维 + 并查集困难题 + 细节不懂】

    分析 一个个删很难受 可以反过来一个个加 然后加的话回导致合并,所以用并查集 把当前的x和x + 1合并起来 更新每一段的和,把和聚集到find(x + 1)的这个代表元这里 ac code clas ...

最新文章

  1. js生日计算年龄_如何提取身份证生日和年龄,几行VBA代码教你学会
  2. 一个专业处理字符串的IDEA插件
  3. eclipse断点调试 出现Source not found
  4. Apache开源项目
  5. 怎么更新鸿蒙系统mate10,能不能升级鸿蒙系统?
  6. aws cognito_AWS Cognito的用户管理—(2/3)核心功能
  7. idea导包都报错_不仅仅要会导别人的包也要会导自定义的包——Python导包总结...
  8. learn go ifelse
  9. C#爬网页时“远程服务器返回错误: (403) 已禁止”解决方法
  10. 在JavaScript中生成特定范围内的随机整数?
  11. 阿里云工程师用机器学习破解雾霾成因
  12. 【优化算法】金鹰优化算法(GEO)【含Matlab源码 187期】
  13. 【CocosCreator】单机游戏存档的常用加密解密方法
  14. HDU-不定积分-求一条直线与抛物线所围成的面积
  15. 支持向量机:Duality
  16. confluence 制作流程图_超好用的流程图绘图工具你还没get吗?
  17. cmd下访问内部数据库
  18. LeetCode hot-100 简单and中等难度,31-40.
  19. 正则表达式,前后非空,中间可空
  20. 限电模块的在学生宿舍管理中的功能要求

热门文章

  1. frp对http协议应用
  2. 使用docker部署mysql主从复制集群
  3. 关于Treap的学习感受
  4. html总结:文本框填满表格
  5. 关于arguments的用法
  6. Java_基础—List的三个子类的特点
  7. java 空指针异常之一。 新建的一个对象没有NEW 导致其SET属性时报错
  8. 带日期的bean转为json(bean-JSON)
  9. 【BZOJ 3191】[JLOI2013]卡牌游戏
  10. 统计--过滤(筛选)索引的统计信息过期问题测试