算法:重复N次的元素
2020-05-12 本文已影响0人
金星show
题目:在大小为2N的数组A中有N+1个不同的元素,其中有一个元素重复了N次。返回重复了N次的那个元素;(从题目中可以分析到只会存在一个重复的元素)
示例:
输入:【1,2,3,3】
输出:3
输入:【2,1,2,5,3,2】
输出:2
解法1---计数法
$a = [2,1,2,5,3,2];
foreach($a as $v) {
if (!isset($tmp[$v])) {
$tmp[$v] = 1;
} else {
echo $v;die();
}
}
时间复杂度: O(N/2+1)
解法2---距离法
1234566666 1626364656 6126363656 。。。
3123 3132 3312 。。。 最大距离为2
不管如何排列,假定上述条件的基础上,重复元素之间的距离最大不会超过3,也就是最大距离为2;
$a = [1,2,3,4,5,6,6,6,6,6];
//$b = [3,1,2,3];
for ($i=1;$i<=3;$i++) {
for ($j=0;$j<count($a)-$i;$j++) {
if ($a[$j] == $a[$j+$i]) {
echo $a[$j];die();
}
}
}
时间复杂度: 3 * O(N) 一般常数会省略