现在的位置: 首页 > 算法 > 正文

php求两数组交集的几种方法

2020年02月11日 算法 ⁄ 共 2021字 ⁄ 字号 评论关闭

  题目:给定两个数组,编写一个函数来计算它们的交集。

  示例 1:

  输入: nums1 = [1,2,2,1],nums2 = [2,2]

  输出: [2]

  示例 2:

  输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]

  输出: [9,4]

  说明:

  输出结果中的每个元素一定是唯一的。

  我们可以不考虑输出结果的顺序。

  解法一:迭代一个数组

  思路分析:

  迭代一个数组,判断是否存在另外一个数组

  PHP 代码实现:

  /**

  * @param Integer[] $nums1

  * @param Integer[] $nums2

  * @return Integer[]

  */

  function intersection($nums1, $nums2) {

  $res = [];

  for($i=0;$i

  if(in_array($nums1[$i],$nums2)){

  $res[] = $nums1[$i];

  }

  }

  return array_unique($res);

  }

  使用:

  $nums2 = [2,4,6,7,8,99];

  $nums1 = [1,2,5,9,9,66,89,90,99,99];

  var_dump(intersection($nums1, $nums2));

  复杂度分析:

  时间复杂度:O(mn)

  解法二:内置数组函数

  思路分析:

  使用array_intersect()函数进行取数组的交集,然后再使用array_unique()去重

  PHP 代码实现:

  /**

  * @param Integer[] $nums1

  * @param Integer[] $nums2

  * @return Integer[]

  */

  function intersection($nums1, $nums2) {

  return array_unique(array_intersect($nums1,$nums2));

  }

  使用:

  $nums2 = [2,4,6,7,8,99];

  $nums1 = [1,2,5,9,9,66,89,90,99,99];

  var_dump(intersection($nums1, $nums2));

  解法三:暴力解法

  思路分析:

  先把两个数组合并为一个数组,再两次循环遍历查找

  PHP 代码实现:

  /**

  * @param Integer[] $nums1

  * @param Integer[] $nums2

  * @return Integer[]

  */

  function intersection($nums1, $nums2) {

  $new_arr = array_merge(array_unique($nums1),array_unique($nums2));

  $res = [];

  for($i=0;$i

  for($j=$i+1;$j

  if($new_arr[$i] == $new_arr[$j]){

  $res[] = $new_arr[$i];

  }

  }

  }

  return array_unique($res);

  }

  使用:

  $nums2 = [2,4,6,7,8,99];

  $nums1 = [1,2,5,9,9,66,89,90,99,99];

  var_dump(intersection($nums1, $nums2));

  复杂度分析:

  时间复杂度:O(n^2)

  解法四:双指针

  思路分析:

  先把两个数组排序,通过双指针往前推来进行查找

  PHP 代码实现:

  /**

  * @param Integer[] $nums1

  * @param Integer[] $nums2

  * @return Integer[]

  */

  function intersection($nums1, $nums2) {

  sort($nums1);

  sort($nums2);

  $i = $j = 0;

  $res = [];

  while($i < count($nums1) && $j < count($nums2)){   if($nums1[$i] == $nums2[$j]){   $res[] = $nums1[$i];   $i++;   $j++;   }elseif($nums1[$i] < $nums2[$j]){   $i++;   }elseif($nums1[$i] > $nums2[$j]){

  $j++;

  }

  }

  return array_unique($res);

  }

  使用:

  $nums2 = [2,4,6,7,8,99];

  $nums1 = [1,2,5,9,9,66,89,90,99,99];

  var_dump(intersection($nums1, $nums2));

  复杂度分析:

  时间复杂度:O(nlogn)

  以上就是php求两数组交集的三种方法详解的详细内容,更多请关注学步园。

抱歉!评论已关闭.