兩個數組的交集

JavaScript實現LeetCode第349題:兩個數組的交集web

題目描述

給定兩個數組,編寫一個函數來計算它們的交集。算法

示例 1:數組

輸入: nums1 = [1,2,2,1], nums2 = [2,2]
輸出: [2]

示例 2:微信

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

說明:編輯器

  • 輸出結果中的每一個元素必定是惟一的。
  • 咱們能夠不考慮輸出結果的順序。

解題思路

幼稚的方法是根據第一個數組 nums1 迭代並檢查每一個值是否存在在 nums2 內。若是存在將值添加到輸出。這樣的方法會致使 O(nxm) 的時間複雜性,其中 n 和 m 是數組的長度。函數

使用set 來實現線性時間複雜度spa

解法方法

/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/

var intersection = function(nums1, nums2) {
// 使用 set 來存儲結果
const result = new Set();
const set2 = new Set(nums2);
for(let i = 0; i < nums1.length; i++) {
// set查找的時間複雜度爲 O(1)
if(set2.has(nums1[i])) {
result.add(nums1[i]);
}
}
// 最後須要將set轉成數組
return Array.from(result);
};

複雜度分析

  • 時間複雜度是:O(n),實際爲( m + n),m爲nums1的個數,n爲 set2 (PS: 係數能夠忽略)
  • 空間複雜度:O(n),咱們忽略存儲答案所使用的空間,由於它對算法自己並不重要。

參考

LeetCode第349題:兩個數組的交集題解.net

本文分享自微信公衆號 - 牧碼的星星(gh_0d71d9e8b1c3)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。code

相關文章
相關標籤/搜索