计算两个数组的交集 哈希算法 + 双指针法

给定两个数组,编写一个函数来计算它们的交集

示例 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;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_24973351/article/details/118560273