给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。
样例
给出 [1,2,2,1,3,4,3],返回 4
挑战
一次遍历,常数级的额外空间复杂度
1 <?php 2 //落单的数 3 4 //方案一:按位异或(^):将两个数中一个为 1,另一个为 0,的位设为 1 5 function solution($data) 6 { 7 $res = false; 8 foreach($data as $v) 9 { 10 $res ^= $v; 11 } 12 return $res; 13 } 14 15 //方案二 16 function solution2($data) 17 { 18 $tmp = array_flip(array_count_values($data)); 19 return $tmp[1]; 20 } 21 22 //打印 23 function show($info) 24 { 25 echo "<pre>"; 26 print_r($info); 27 } 28 29 $arr = [1, 2, 2, 1, 3, 4, 3]; 30 $res = solution($arr); 31 show($res); 32 33 $res = solution2($arr); 34 show($res);