type
status
date
slug
summary
tags
category
icon
password
创建时间
Feb 21, 2025 09:24 AM
集合
s
包含从 1
到 n
的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。给定一个数组
nums
代表了集合 S
发生错误后的结果。请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。
哈希表
位运算
重复的数字在数组中出现2次,丢失的数字在数组中出现0次,其余的每个数字在数组中出现1次。在数的n个数字后面再添加从1到n的每个数字,得到2n个数字,则在2n个数字中,重复的数字出现3次,丢失的数字出现1次,其余的每个数字出现2次。
设 a 和 b 分别表示重复的数字和丢失的数字,则对上述 2n 个数字进行异或计算,最后化简可以得到 xor = a ^ b。因为 a ≠ b,所以 xor 不为 0,我们可以找 xor 中的最低位的 1,就是 a 与 b 的不同的位,作为区分 a 与 b 的区别之位。lowbit = xor ^ (-xor)。
因此,我们按照 lowbit 区分,得到两组数据。
📎 参考
- 无