如何找出数组中唯一的重复元素


题目

数组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);

参考文档


Author: Itaken
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Itaken !
  TOC目录