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

前言

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

LeetCode 启动!

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

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

代码与解题思路

今天的题目比较简单~

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

go 复制代码
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) 的空间复杂度了。

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

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

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

可以和我刷一辈子的每日一题吗?

一题一题,积累起来就是一辈子。

相关推荐
圣保罗的大教堂3 分钟前
leetcode 3433. 统计用户被提及情况 中等
leetcode
Ayanami_Reii22 分钟前
区间不同数的个数-树状数组/线段树/莫队/主席树
数据结构·c++·算法·线段树·树状数组·主席树·莫队
李玮豪Jimmy31 分钟前
Day37:动态规划part10(300.最长递增子序列、674.最长连续递增序列 、718.最长重复子数组)
算法·动态规划
歌_顿39 分钟前
Embedding 模型word2vec/glove/fasttext/elmo/doc2vec/infersent学习总结
人工智能·算法
Echo_NGC223740 分钟前
【KL 散度】深入理解 Kullback-Leibler Divergence:AI 如何衡量“像不像”的问题
人工智能·算法·机器学习·散度·kl
CoderYanger1 小时前
C.滑动窗口-求子数组个数-越长越合法——3325. 字符至少出现 K 次的子字符串 I
c语言·数据结构·算法·leetcode·职场和发展·哈希算法·散列表
sin_hielo1 小时前
leetcode 3606
数据结构·算法·leetcode
Xの哲學2 小时前
Linux DRM 架构深度解析
linux·服务器·算法·架构·边缘计算
qq_433554542 小时前
C++树形DP(树上分组背包)
c++·算法·深度优先
电子_咸鱼3 小时前
常见面试题——滑动窗口算法
c++·后端·python·算法·leetcode·哈希算法·推荐算法