1. 程式人生 > 實用技巧 >兩個陣列的交集II

兩個陣列的交集II

兩個陣列的交集II

給定兩個陣列,編寫一個函式來計算它們的交集。

示例

輸入:nums1 = [1,2,2,1], nums2 = [2,2]
輸出:[2,2]
輸入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
輸出:[4,9]

說明

  • 輸出結果中每個元素出現的次數,應與元素在兩個陣列中出現次數的最小值一致。
  • 我們可以不考慮輸出結果的順序。

題解

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersect = function(nums1, nums2) {
    var hashTable = {};
    var target = [];
    nums1.forEach(v => {
        if(hashTable[v]) hashTable[v]++;
        else hashTable[v] = 1;   
    })
    nums2.forEach(v => {
        if(hashTable[v] && hashTable[v] > 0) {
            hashTable[v]--;
            target.push(v);
        }
    })
    return target;
};

思路

本題使用雜湊表的方式來解答,而Js中物件也是以HashTable進行儲存的,便可以直接利用Js物件來實現雜湊表,請注意題目要求結果中每個元素出現的次數應與元素在兩個陣列中出現次數的最小值一致,根據這個要求那麼需要在雜湊表中記錄值出現的次數,首先定義一個HashTable用以記錄值出現次數,然後定義目標陣列,接著將第一個陣列nums1進行遍歷,在雜湊表中如果沒有定義這個key,那麼就將這個key的值設定為1,如果已經定義了,那麼就將其值自增,然後遍歷第二個陣列nums2,直接判斷在雜湊表中是否定義該key,如果定義且其計數值大於0,那麼就將雜湊表中該key的計數值自減,然後將該key推入陣列,迴圈結束後返回目標陣列即可。

每日一題

https://github.com/WindrunnerMax/EveryDay

題源

https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/