两个数组的交集

题意:

给定两个数组 nums1nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

示例 1:

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

示例 2:

输入 :nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出 :[9,4]
解释:[4,9] 也是可通过的

提示:

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 1000

来源: https://leetcode.cn/problems/intersection-of-two-arrays/description/

解题方法:

方法一:使用PHP内置函数,取交集再去重

php 复制代码
// PHP内置函数
function intersection($nums1, $nums2) {
    return array_unique(array_intersect($nums1,$nums2));
}

方法二:暴力使用双循环

php 复制代码
// 双层嵌套循环
function intersection($nums1, $nums2) {
    $intersect_arr = [];
    $len1 = count($nums1);
    $len2 = count($nums2);
    for($i = 0; $i < $len1; $i++){
        for($j = 0; $j < $len2; $j++){
            if($nums1[$i] == $nums2[$j] && !isset($intersect_arr[$nums2[$j]])){
                $intersect_arr[$nums2[$j]] = $nums2[$j];
            }
        }
    }
    return $intersect_arr;
}

方法三:hash表,循环两次(与双层嵌套循环不同)

php 复制代码
//hash表,循环两次(与双层嵌套循环不同)
function intersection($nums1, $nums2) {
    $count = [];
    $res = [];
    foreach($nums1 as $num){
        $count[$num] = 1;
    }
    foreach($nums2 as $num){
        if(isset($count[$num])){
            $res[] = $num;
        }
        unset($count[$num]);
    }
    return $res;
}

方法四:循环一次,但是使用了内置函数

php 复制代码
// 一次循环,利用长度做判断,判断是否在另一个中和结果集中
function intersection($nums1, $nums2) {
    $res = [];
    if(count($nums2) > count($nums1)){
        foreach($nums1 as $num){
            if(in_array($num, $nums2) && !in_array($num, $res)){
                $res[] = $num;
            }
        }
    }else{
        foreach($nums2 as $num){
            if(in_array($num, $nums1) && !in_array($num, $res)){
                $res[] = $num;
            }
        }
    }
    return $res;
}
相关推荐
少许极端34 分钟前
算法奇妙屋(五)-链表
数据结构·算法·链表
XISHI_TIANLAN1 小时前
【多模态学习】Q&A6: 什么是MOE架构?Router Z Loss函数是指什么?负载均衡损失(Load Balancing Loss)又是什么?
学习·算法·语言模型
木子.李3471 小时前
数据结构-算法C++(额外问题汇总)
数据结构·c++·算法
花心蝴蝶.1 小时前
API签名认证算法全解析
算法
兮山与1 小时前
算法6.0
算法
代码对我眨眼睛2 小时前
739. 每日温度 LeetCode 热题 HOT 100
算法·leetcode
程序员莫小特2 小时前
老题新解|计算2的N次方
开发语言·数据结构·算法·青少年编程·信息学奥赛一本通
wearegogog1233 小时前
基于块匹配的MATLAB视频去抖动算法
算法·matlab·音视频
十重幻想4 小时前
PTA6-1 使用函数求最大公约数(C)
c语言·数据结构·算法
stwood0074 小时前
codeigniter换服务器之后,会员登录之后又跳回登录页面的解决方法
服务器·php