给你一个数组 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;
}
标签:XOR,数字,nums,异或,num,数组,3158
From: https://www.cnblogs.com/java-cheng/p/18459811