问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何获取两个数组中的交集 - 技术问答

发布网友 发布时间:2022-04-07 08:03

我来回答

3个回答

懂视网 时间:2022-04-07 12:24

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

示例 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<count($nums1);$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<count($new_arr);$i++){
 for($j=$i+1;$j<count($new_arr);$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相关知识,请访问php教程!

热心网友 时间:2022-04-07 09:32

array_intersect(PHP 4 >= 4.0.1, PHP 5)array_intersect -- 计算数组的交集说明array array_intersect ( array array1, array array2 [, array ...] )array_intersect() 返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。 例 1. array_intersect() 例子= array(\"a\" => \"green\", \"red\", \"blue\");$array2 = array(\"b\" => \"green\", \"yellow\", \"red\");$result = array_intersect($array1, $array2);?>

热心网友 时间:2022-04-07 10:50

这个是算法的问题动动脑子:biggrin: 用循环判断??貌似循环很低效。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
生物特征识别技术所研究的生物特征包括哪些? 精通CFD工程仿真与案例实战:FLUENT GAMBIT ICEM CFD Tecplot目录 电脑加号怎么打出来电脑号键怎么打出来 刚买的苹果6去查序列号是国行的,可是过几天自己刷了机就原形毕露,完全... 苏宁易购上的手机都是正品行货吗 喻强声是喻政声的弟弟吗 从虹桥机场怎样去乌镇 上海虹桥国际机场2号航站楼开车到乌镇怎么走 169cm是多少米 电脑没有核心显卡能开机吗电脑没有显卡能开机吗 简述五代山水画的分宗立派及其主要特点 急!从&lt;潇湘图&gt;中分析江南山水画的审美意识和青绿山水画的技法特征和审美意识 五代南派山水画代表画家有哪些 《千里江山图》是谁画的? 郭凤祥的作品评价 董源为什么被誉为江南山水画祖师? 近代江南画派的代表人物 中年女人晚上尿频繁了该怎么办 女性 48岁 出现尿频 伴随咳嗽 小便有渗漏 好想没自控能力似地,这是怎么回事,急需有人解答 中年女人尿频怎么办 联想笔记本电脑突然停电之后自动关机,然后充不上电也打不开了怎么回事? 我是中年妇女,尿频有一段时间了,夜里起来三四次,尿液多,问如何治或者调理? 中年女性尿频什么问题 我是一名48岁的妇女,一遇炎热天气就尿频尿急尿痛,请问是什么原因、该如何治疗? 联想笔记本电脑电池用完了自动关机后开机就开不了了? 中年女性夜尿频多是怎么回事 新企业会计准则中对交强险应当计入什么科目? 中年女性晚上夜尿多是什么原因 联想的笔记本,没电自动关机后,我冲了会电,开机进不去!!! 中年女性夜间尿频是为什么 中国城镇人口和农村人口比例是多少? 第六次人口普查如何算城镇人口 我国总人口13.4亿,城镇人口49.5%,城镇人口数约为多少,怎么算 中国的城市人口数量是怎么计算的 我国的城市化率一直在稳步攀升,城市化率是怎么计算出来的? 蓝牙4.0是什么概念? 如何取两个已排序数组的交集 城镇化百分率是怎么计算的?城镇人口是不是指户口本里是非农那些? 急求解!若某城市城区人口25.35万、总人口71.68万,该城市城镇化率是多少?怎么计算? 中国城镇人口比重如何计算的 请问数学: 城市化率是不是这样计算: 非农业人口÷总人口=城市化率对吗?那么什么是非农业户口呢? 城镇人口减少率怎么算 企业邮箱怎么注册?集团公司用什么邮箱? 集团公司怎么申请邮箱? 集团公司注册什么企业邮箱? 集团企业邮箱注册哪家好?集团邮箱到期了怎么更换? 集团大公司企业邮箱,一般都是从哪里注册的,用自建的还是托管的? php 取交集 激光打印机(Laser Printer)和热敏打印机(Thermal Printer)的区别 说说看热敏打印机激光打印机哪个好