645. 错误的集合
难度:简单
集合 s
包含从 1
到 n
的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。
给定一个数组 nums
代表了集合 S
发生错误后的结果。
请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。
示例 1:
1 | 输入:nums = [1,2,2,4] |
示例 2:
1 | 输入:nums = [1,1] |
提示:
2 <= nums.length <= 104
1 <= nums[i] <= 104
原地哈希表
1 | class Solution { |
查找重复元素
遍历数组的每个元素,将当前遍历的元素 $c$ 作为 $index$ ,使 $nums[index]*=-1$,遍历下一个元素时,判断下一个元素 $c$ 作为 $index$ 时, $nums[index]$ 是否小于 $0$ ,如果小于 $0$说明元素c已经被遍历过了,是重复元素
查找丢失元素
再次遍历修改后的数组,如果修改后的数组中某个值不小于0,说明这个index没有被遍历到,也就是原数组中没有这个值(因为index就是遍历的值)
1 | class Solution { |
异或运算
通过异或运算对数字分组,类似于前面做的剑指 Offer 56 - I. 数组中数字出现的次数
1 | public class Solution { |