2019-03-06 吴亲库里 库里的深夜食堂
给一个不为空的数组,除了一个元素外,每一个元素都会出现两次,找出那个出现一次的数.

我的思路(好吧我第一次使用的是暴力破解法,这是一种超级常规的思想,看看就好,他的运行效率会很低,不推荐这种,既然我们刷题了,当然要用更优的解法做题)
/**
* @param Integer[] $nums
* @return Integer
*/
function singleNumber($nums) {
$data=[];
foreach($nums as $num) {
if(!in_array($num,$data)) {
array_push($data,$num);
}else{
$index=array_search($num,$data);
array_splice($data,$index,1);
}
}
return $data[0];
}
我们可以通过运算符异或(^)来进行比较,当^左边等于右边时,结果为默认值0,当^的左边不等于右边时,结果返回默认值1.所以我们可以将所有的位异或找出唯一的值.
/**
* @param Integer[] $nums
* @return Integer
*/
function singleNumber($nums) {
$res=0;
for($i=0;$i<count($nums);$i++) {
$res ^=$nums[$i];
}
return $res;
}
