作者:MJ昊
公众号:程序猿的编程之路
今天是 昊 的算法之路第11天,今天分享的是LeetCode第3158题求出出现两次数字的 XOR 值的解题思路。这道题目难度为简单,通过哈希集合和异或运算可以高效解决。
题目描述简要回顾
给定一个整数数组 nums,其中某些数字出现了两次,其他数字只出现一次。题目要求找出所有出现了两次的数字并计算它们的异或结果。
解题思路
-
哈希集合辅助判断:利用
Set检查数字是否已经出现过。 -
异或运算特点:对同一数字进行两次异或会抵消,因此我们在检测到重复数字时将其加入异或运算。
代码实现:
var duplicateNumbersXOR = function (nums) {
let arr = new Set();
let res = 0
for (let i = 0; i < nums.length; i++) {
if (arr.has(nums[i])) {
res ^= nums[i]// 重复数字进行异或
} else {
arr.add(nums[i])// 首次出现的数字加入集合
}
}
return res
};
复杂度分析
- 时间复杂度:
O(n),遍历数组中的每个元素一次。 - 空间复杂度:
O(n),最坏情况下所有元素都加入集合。
总结
这道题充分利用了异或运算的性质,使得代码简洁且高效。通过哈希集合判断数字是否重复,也让逻辑更加直观。