欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 【LeetCode】每日一题 2024_10_12 求出出现两次数字的 XOR 值(哈希、模拟)

【LeetCode】每日一题 2024_10_12 求出出现两次数字的 XOR 值(哈希、模拟)

2025/3/10 18:46:58 来源:https://blog.csdn.net/Locky136/article/details/142874150  浏览:    关键词:【LeetCode】每日一题 2024_10_12 求出出现两次数字的 XOR 值(哈希、模拟)

前言

每天和你一起刷 LeetCode 每日一题~

LeetCode 启动!

题目:求出出现两次数字的 XOR 值

昨天没有更新,因为昨天的题目和前天的每日一题是一模一样的,只是同一道题目,加强了数据范围,恰好的是,前天做这道题的时候我就在题解中分析了暴力做法和优化后的 nlogn 做法 . . . 所以昨天就没有直接把文章 CV 之后再发一遍了~

代码与解题思路

今天的题目比较简单~

题目要求对出现两次的数相互进行异或操作,用哈希计数,出现第二次就异或到 ans 中即可

func duplicateNumbersXOR(nums []int) (ans int) {// 哈希计数,出现两次的就异或一下cnt := map[int]int{}for _, v := range nums {cnt[v]++if cnt[v] > 1 { // 出现两次ans ^= v}}return ans
}

有没有更优的解法呢?

已经做到了 O(N) 的时间复杂度,再往下一步就是做到 O(1) 的空间复杂度了。

对于集合计数相关的题目,还有一种巧妙的方法,通过数字的二进制位来实现一个集合:

func duplicateNumbersXOR(nums []int) (ans int) {vis := 0for _, v := range nums {if vis >> v & 1 == 1 { // 该位置是 1,代表该数字已经出现过一次,这次是第二次ans ^= v // 出现两次的值异或到一起} else {vis |= 1 << v // 把该值转化成二进制位加入 vis 集合中}}return ans
}

每天进步一点点,我们明天不见不散~

可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词