实现方式:
- 先用hash表记录第一个数组中的元素【放在key】,和出现的次数【放在value】。
- 然后再遍历第二个数组,如果找到对应元素,则添加这个元素到返回数组里。
- 如果value值大于1,HashMap中的value值减 1,表示已经找到一个相同的了。
- 如果value值等于1,则删除该元素。
/**
* 求两个数组的交集
* param array $nums1
* param array $nums2
* return array
*/
function intersect(array $nums1, array $nums2):array {
$result = [];
$hash = [];
for($i=0; $i<count($nums1);$i++){
if(isset($hash[$nums1[$i]])){
$hash[$nums1[$i]]++;
}else{
$hash[$nums1[$i]] = 1;
}
}
for($i=0; $i<count($nums2);$i++){
if(isset($hash[$nums2[$i]])){
$result[] = $nums2[$i];
if($hash[$nums2[$i]] > 1){
$hash[$nums2[$i]]--;
}else{
unset($hash[$nums2[$i]]);
}
}
}
return $result;
}
//example
$nums1 = [4,9,5];
$nums2 = [9,4,9,8,4];
print_r(intersect($nums1, $nums2));
//output
Array
(
[0] => 9
[1] => 4
)