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.先说明下XOR值
“按位 XOR 值”指的是对两个或多个二进制数进行逐位异或(XOR)操作的结果。异或操作是一种位运算,其特点是:
当两个位相同时,结果为 0。
当两个位不同时,结果为 1。
2.实现就是根据map储存,然后判断value是否大于2,把大于的部分计算即可

完整代码:
    /**
     * 使用异或操作查找重复的数字
     * 此方法通过异或操作来找出数组中重复出现的数字
     * 异或操作的特点是,两个相同的数异或结果为0,因此数组中所有数字异或的结果等于重复数字的值
     * 
     * @param nums 输入的整数数组
     * @return 数组中重复的数字
     */
    public int duplicateNumbersXOR(int[] nums) {
        // 存储最终结果
        int res = 0;
        // 使用哈希表记录每个数字出现的次数
        Map<Integer,Integer> map = new HashMap<>();
        for (int num : nums) {
            // 更新哈希表中数字出现的次数,如果不存在则初始化为0
            map.put(num, map.getOrDefault(num, 0) + 1);
            // 获取当前数字出现的次数
            Integer integer = map.get(num);
            // 如果数字出现次数大于等于2,则将其与结果进行异或操作
            // 这里体现了利用异或操作寻找重复数字的核心逻辑
            if(integer >=2){
                res = res ^ num;
            }
        }
        // 返回结果,即数组中重复的数字
        return res;
    }
posted @ 2024-10-12 09:24  JAVA-CHENG  阅读(20)  评论(0编辑  收藏  举报