给你一个数组 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 <= nums.length <= 50
1 <= nums[i] <= 50
nums
中每个数字要么出现过一次,要么出现过两次。
class Solution {public int duplicateNumbersXOR(int[] nums) {ArrayList list=new ArrayList<>();int result=0;//0与任何数异或结果不变for (int num : nums) {if (list.contains(num)){result^=num;}else {list.add(num);}}return result;}
}
定义一个list集合,里面最开始是空的,遍历nums的每个元素num。
如果list里面包含num,与结果result进行异或计算;
不包含则说明num是第一次出现,添加到list,方便后面的num比较。