算法:重复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)  一般常数会省略
上一篇下一篇

猜你喜欢

热点阅读