给定两个数组,编写一个函数来计算它们的交集
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]
哈希算法实现
class Solution {
/**
* @param Integer[] $nums1
* @param Integer[] $nums2
* @return Integer[]
*/
function intersect($nums1, $nums2) {
$hash = $result = $temp = [];
if(count($nums1) > count($nums2)){
$temp = $nums1;
$nums1 = $nums2;
$nums2 = $temp;
}
foreach($nums1 as $num){
if(isset($hash[$num])){
$hash[$num]++;
}else{
$hash[$num] = 1;
}
}
foreach($nums2 as $num){
if(isset($hash[$num]) && $hash[$num] > 0 ){
$result[] = $num;
$hash[$num]--;
}
}
return $result;
}
}
双指针法
class Solution {
/**
* @param Integer[] $nums1
* @param Integer[] $nums2
* @return Integer[]
*/
function intersect($nums1, $nums2) {
sort($nums1);
sort($nums2);
$i = $j = 0;
$result = [];
while($i < count($nums1) && $j < count($nums2)){
if($nums1[$i] == $nums2[$j] ){
$result[] = $nums1[$i];
$i++;
$j++;
}else{
$nums1[$i] > $nums2[$j] ? $j++ :$i++;
}
}
return $result;
}
}