LeetCode每日一题记录
2024/10/12-求出出现两次数字的XOR值
给你一个数组 nums
,数组中的数字 要么 出现一次,要么 出现两次。
请你返回数组中所有出现两次数字的按位 XOR
值,如果没有数字出现过两次,返回 0 。
class Solution {
public int duplicateNumbersXOR(int[] nums) {
/**
XOR 异或操作
在java中异或操作使用 ^ 实现
例如,整数类型的异或运算:int a = 5; int b = 7; int result = a ^ b;。这里,5 的二进制表示为 0101,7 的二进制表示为 0111,进行异或运算后结果为 0010,即十进制的 2。
在 Java 中,布尔类型也可以进行异或运算。例如:boolean c = true; boolean d = false; boolean res = c ^ d;,结果为 true,因为 true 和 false 不同,异或结果为 true。
思路:1. 先排序,然后遍历一遍数组,因为相同元素会挨着,而且数组元素最多出现两次,所以只要看后面有没有即可
用list存储
2. 不排序了,直接用哈希表记录次数,因为元素的大小有限制,则可以直接使用数组作为哈希表
*/
Arrays.sort(nums); // O(nlogn)
var list = new ArrayList<Integer>();
for(int i=1; i<nums.length; i++) {
if(nums[i] == nums[i-1]) {
list.add(nums[i]);
}
} // O(n)
if(list.size() == 0) return 0;
int ans = list.get(0);
for(int i=1; i<list.size(); i++) {
ans ^= list.get(i);
}
return ans;
}
}
class Solution {
public int duplicateNumbersXOR(int[] nums) {
boolean[] exist = new boolean[51];
int ans = 0;
for (int num : nums) {
if (exist[num]) {
ans ^= num;
}
exist[num] = true;
}
return ans;
}
}
原文地址:https://blog.csdn.net/m0_47411815/article/details/142868115
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!