3158. 求出出现两次数字的 XOR 值
题目描述:
给你一个数组 nums
,数组中的数字 要么 出现一次, 要么 出现两次。
请你返回数组中所有出现两次数字的按位 XOR
值,如果没有数字出现过两次,返回 0 。
示例 1:
输入: nums = \[1,2,1,3\]
输出: 1
解释:
`nums` 中唯一出现过两次的数字是 1 。
示例 2:
输入: nums = \[1,2,3\]
输出: 0
解释:
`nums` 中没有数字出现两次。
示例 3:
输入: nums = \[1,2,2,1\]
输出: 3
解释:
数字 1 和 2 出现过两次。 `1 XOR 2 == 3` 。
提示:
1 <= nums.length <= 50
1 <= nums[i] <= 50
nums
中每个数字要么出现过一次,要么出现过两次。
解题分析及思路:
方法:哈希表
思路:
-
遍历数组,将每个数字作为键,出现次数作为值,存入哈希表。
-
遍历哈希表,如果某个数字出现次数为 2,则将对应的数字与结果进行异或运算。
func duplicateNumbersXOR(nums []int) int {
var xor int
var m = make(map[int]int)
for _, num := range nums {
m[num]++
}
for k, v := range m {
if v == 2 {
xor ^= k
}
}
return xor
}
复杂度:
- 时间复杂度:O(n)
- 空间复杂度:O(n)
执行结果:
- 执行耗时:6 ms,击败了17.39% 的Go用户
- 内存消耗:3 MB,击败了43.48% 的Go用户