落单的数

给出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);

猜你喜欢

转载自www.cnblogs.com/573583868wuy/p/8948108.html