每日一题(一):找出两个数组中共有的数字
最近准备记录一下在leetcode刷到的算法题和在面试中遇到的一些题目
题目:有两个数组[1,2,5,11,32,15,77]和[99,32,15,5,1,77,77]两个数组,写段程序找出它们共同都拥有的数
解法一: 利用循环去一对一匹配,最后去重
function getPublicNumber($a,$b){
$a_length = count($a);
$b_length = count($b);
$arr = [];
for ($i = 0; $i < $a_length; $i++){
for ($j = 0; $j < $b_length; $j++){
if ($a[$i] == $b[$j]) $arr[] = $a[$i];
}}
return array_unique($arr);
}
解法二:利用PHP内置函数
return array_intersect($a,$b);
解法三:利用PHP数组函数
function getPublicNumber($a,$b) {
$a = array_unique($a);
$b = array_unique($b);
foreach($a as $k => $v){
if (!in_array($v,$b)){
unset($a[$k]);
}
}
}
return $a;
欢迎各位留言补充更多的解法
本作品采用《CC 协议》,转载必须注明作者和本文链接
用 hash 映射效率会更高一点吧,遍历第一个数组放到 arr[v] = 1,遍历第二个数组去映射表里边找输出结果,复杂度
O(n)
@wj2015 是呢,解法很多,等我有空了补充一下
不是有个取 并集 交集 合集的吗