题目
数组a[N],1至N-1这N-1个数存放在a[N]中,其中某个数重复一次,写一个函数, 找出被重复的数字。 要求每个数组元素只能访问一次,不用辅助存储空间。
解法
例如: $arr = [3,5,1,2,8,4,2,6,7,9];
最初的思路, 排序, 然后比对即可得到答案.
sort($arr);
$tmp = 0;
foreach ($arr as $v){
if($tmp == $v){
break;
}
$tmp = $v;
}
echo $tmp;
或者, 使用 in_array
$tmp = 0;
$i = 0;
foreach ($arr as $v){
$tmp = $v;
unset($arr[$i]);
$i ++;
if(in_array($tmp, $arr)){
break;
}
}
echo $tmp;
如果, 再添加 [ 要求每个数组元素只能访问一次,不用辅助存储空间。 ] 要求:
$tmp1 = 0;
$tmp2 = 0;
$i = 0;
foreach ($arr as $v){
$tmp1 += $i;
$tmp2 += $v;
$i ++;
}
echo ($tmp2 - $tmp1);