LeetCode|3158. 求出出现两次数字的 XOR 值(day11)

69 阅读1分钟

作者:MJ昊

博客:掘金CSDN

公众号:程序猿的编程之路

今天是 昊 的算法之路第11天,今天分享的是LeetCode第3158题求出出现两次数字的 XOR 值的解题思路。这道题目难度为简单,通过哈希集合和异或运算可以高效解决。

题目描述简要回顾

给定一个整数数组 nums,其中某些数字出现了两次,其他数字只出现一次。题目要求找出所有出现了两次的数字并计算它们的异或结果。

解题思路

  1. 哈希集合辅助判断:利用 Set 检查数字是否已经出现过。

  2. 异或运算特点:对同一数字进行两次异或会抵消,因此我们在检测到重复数字时将其加入异或运算。

代码实现:

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),最坏情况下所有元素都加入集合。

总结

这道题充分利用了异或运算的性质,使得代码简洁且高效。通过哈希集合判断数字是否重复,也让逻辑更加直观。