两个数组的交集


两个数组的交集

题目

1
2
3
4
5
6
7
8
9
10
11
给定两个数组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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
思路:
遍历第一个数组,数组值作为map的下标,map的值为false,
遍历第二个数组,判断值是否在map的下标里,且map的只为false
将值加入到最后输出的数组中,将map的值设置为true
不考虑简单写法 return array_unique(array_intersect($nums1, $nums2));

代码:
/**
* @param Integer[] $nums1
* @param Integer[] $nums2
*
* @return Integer[]
*/
function intersection($nums1, $nums2)
{
$map = [];
// 遍历第一个数组,设置map的同时去重
foreach ($nums1 as $item) {
$map[$item] = false;
}

$res = [];
foreach ($nums2 as $item) {
// 如果在第二个数组中存在map的下标,且下标对应的值为false
if (isset($map[$item]) && !$map[$item]) {
$res[] = $item;
// 设置下标的值为true, 防止重复的数字写入数组
$map[$item] = true;
}
}

return $res;
}