我有一个由正整数组成的数组。除了其中一个元素外,这个数组中的所有元素都没有重复。找到唯一的元素的方法是使用XOR位运算符,它只在其中一个元素为1时返回1,否则返回false。
以下是代码:
在循环中,数组中的每个整数都会与uniqueId进行异或运算,uniqueId从0开始。然后,0与34进行XOR运算。然后将结果与数组中的下一个整数40进行XOR运算,并遍历整个数组。
即使设置断点并逐行查看整个流程,我仍然无法理解如何通过与uniqueId(从值0开始)进行XOR运算来帮助我们找到数组中的非重复整数?
如果像这里一样将数字40与自身进行XOR运算(得到值0),以确认它是重复的,那么不应该吗?在这里,我们将0与数组中的第一个整数进行XOR运算,然后将结果与数组中的下一个数字进行XOR运算。我错过了什么吗?
以下是代码:
public class Bitter {
public static void main(String[] args) {
int[] deliveryIds = {34, 40, 2, 21, 50, 40, 34, 2, 50};
System.out.println(new Bitter().findUniqueDeliveryId(deliveryIds));
}
public int findUniqueDeliveryId(int[] deliveryIds) {
int uniqueDeliveryId = 0;
for(int i = 0; i < deliveryIds.length; i++) {
uniqueDeliveryId ^= deliveryIds[i];
}
return uniqueDeliveryId;
}
}
在循环中,数组中的每个整数都会与uniqueId进行异或运算,uniqueId从0开始。然后,0与34进行XOR运算。然后将结果与数组中的下一个整数40进行XOR运算,并遍历整个数组。
即使设置断点并逐行查看整个流程,我仍然无法理解如何通过与uniqueId(从值0开始)进行XOR运算来帮助我们找到数组中的非重复整数?
如果像这里一样将数字40与自身进行XOR运算(得到值0),以确认它是重复的,那么不应该吗?在这里,我们将0与数组中的第一个整数进行XOR运算,然后将结果与数组中的下一个数字进行XOR运算。我错过了什么吗?