题意:
给定两个数组 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内置函数
function intersection($nums1, $nums2) {return array_unique(array_intersect($nums1,$nums2));
}
方法二:暴力使用双循环
// 双层嵌套循环
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表,循环两次(与双层嵌套循环不同)
//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;
}
方法四:循环一次,但是使用了内置函数
// 一次循环,利用长度做判断,判断是否在另一个中和结果集中
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;
}