请记住 XOR 运算符的这两个属性:
(1) 如果你对一个数字与 0 ( zero ) 进行异或,它会再次返回相同的数字。
意味着 , n ^ 0 = n
(2) 如果你对一个数字本身进行异或,它将返回 0(零)。
意味着 , n ^ n = 0
现在,问题来了:
Let Input_arr = { 23 , 21 , 24 , 27 , 22 , 27 , 26 , 25 }
Output should be 27 ( because 27 is the duplicate element in the Input_arr ).
解决方案 :
第 1 步:在给定数组中找到“min”和“max”值。这将需要 O(n)。
第 2 步:查找从“min”到“max”(包括)范围内的所有整数的 XOR。
第 3 步:查找给定数组的所有元素的 XOR。
第 4 步:第 2 步和第 3 步的 XOR 将给出所需的重复编号。
描述 :
Step1 : min = 21 , max = 27
Step 2 : Step2_result = 21 ^ 22 ^ 23 ^ 24 ^ 25 ^ 26 ^ 27 = 20
Step 3 : Step3_result = 23 ^ 21 ^ 24 ^ 27 ^ 22 ^ 27 ^ 26 ^ 25 = 15
Step 4 : Final_Result = Step2_result ^ Step3_result = 20 ^ 15 = 27
But , How Final_Result calculated the duplicate number ?
Final_Result = ( 21 ^ 22 ^ 23 ^ 24 ^ 25 ^ 26 ^ 27 ) ^ ( 23 ^ 21 ^ 24 ^ 27 ^ 22 ^ 27 ^ 26 ^ 25 )
Now , Remember above two properties : n ^ n = 0 AND n ^ 0 = n
So , here ,
Final_Result = ( 21 ^ 21 ) ^ ( 22 ^ 22 ) ^ ( 23 ^ 23 ) ^ ( 24 ^ 24 ) ^ ( 25 ^ 25 ) ^ ( 26 ^ 26 ) ^ ( 27 ^ 27 ^ 27 )
= 0 ^ 0 ^ 0 ^ 0 ^ 0 ^ 0 ^ ( 27 ^ 0 ) ( property applied )
= 0 ^ 27 ( because we know 0 ^ 0 = 0 )
= 27 ( Required Result )