题意:
给定两个数组 nums1
和 nums2
,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
示例 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;
}