扫码关注官方订阅号
有没有复杂度为O(n)的二维数组合并去重算法
人生最曼妙的风景,竟是内心的淡定与从容!
$a = [ ['id'=>1], ['id'=>2], ['id'=>3], ['id'=>4], ['id'=>5], ['id'=>6] ]; $b = [ ['id'=>5], ['id'=>6], ['id'=>7], ]; $c = [ ['id'=>8], ['id'=>9] ]; function array_unique_merge() { $params = func_get_args(); $result = []; $hashmap = []; $arr_count = count($params); for($i = 0; $i<$arr_count; $i++) { foreach($params[$i] as $key => $val) { $md5 = md5(json_encode($val)); if (!isset($hashmap[$md5])) { $hashmap[$md5] = true; $result[] = $val; } } } return $result; } print_r(array_unique_merge($a, $b, $c));
我只是贴出来一下我的想法可以这么做。如果n指的是所有数组的元素数量之和。
n
这个必须要用2循环,对n的定义应该是多个关联数组的元素之和,双循环就算是O(n)了
serialize以后当作hash比较,这个思路呢?手机我就不写代码了…
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
我只是贴出来一下我的想法可以这么做。如果
n指的是所有数组的元素数量之和。这个必须要用2循环,对n的定义应该是多个关联数组的元素之和,双循环就算是O(n)了
serialize以后当作hash比较,这个思路呢?手机我就不写代码了…