两个数组的交集

地址:https://leetcode-cn.com/problems/intersection-of-two-arrays/

<?php

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

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
示例 2:

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

输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。
 */
class Solution {

    /**
    暴力法,判断一个数值在另一个数组是否存在
     */
    function intersection1($nums1, $nums2) {
       if(count($nums1) <count($nums2)){
           $arr = $nums1;
           $arr1 = $nums2;
       }else{
           $arr = $nums2;
           $arr1 = $nums1;
       }
       $new_arr = [];
       for ($i = 0;$i <count($arr) ;$i++){
           if (in_array($arr[$i],$arr1)){
               $new_arr[$arr[$i]]=$arr[$i];
           }
       }
       return array_values($new_arr);
    }

    /**
     内置函数
     */
    function intersection2($nums1, $nums2) {
        return array_unique(array_intersect($nums1,$nums2));
    }

    /**
     先把2个数组排序,通过双指针往前推来进行查找
     */
    function intersection3($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]){
                $j++;
            }elseif ($nums1[$i] < $nums2[$j]){
                $i++;
            }
        }
        return array_unique($res);
    }
}
$solution = new Solution();
//$nums1 = [1,2,2,1];
//$nums2 = [2,2];
$nums1 = [4,9,5]; $nums2 = [9,4,9,8,4];
var_dump($solution->intersection($nums1, $nums2));
原文地址:https://www.cnblogs.com/8013-cmf/p/12579632.html