每日一题(一):找出两个数组中共有的数字

最近准备记录一下在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 协议》,转载必须注明作者和本文链接
讨论数量: 3

用 hash 映射效率会更高一点吧,遍历第一个数组放到 arr[v] = 1,遍历第二个数组去映射表里边找输出结果,复杂度 O(n)

3年前 评论

@wj2015 是呢,解法很多,等我有空了补充一下

3年前 评论

不是有个取 并集 交集 合集的吗

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!