[leetcode]二つの配列の交差点II[javascript]

3265 ワード

https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/
説明
二つの配列を与え、それらの交差を計算する関数を作成します.例1:
  : nums1 = [1,2,2,1], nums2 = [2,2]
  : [2,2]
例2:
  : nums1 = [4,9,5], nums2 = [9,4,9,8,4]
  : [4,9]
説明:
  • 出力結果の各要素の出現回数は、要素が2つの配列に現れる回数と一致していなければならない.
  • 出力結果の順序を考慮しなくてもいいです.
  • ステップ:
  • 与えられた配列が順序付けされている場合?どうやってあなたのアルゴリズムを最適化しますか?
  • もし_nums 1_nums 2_小さいのが多いですが、どの方法がもっと優れていますか?
  • もし_nums 2_ディスクに記憶されている要素は限られていますが、メモリにすべての要素を一度にロードすることはできません.どうすればいいですか?
  • 分析
    前の問題と同じように、先に小さいのを見つけて、遍歴して、indexOfを使うと同時に、その元素のspliceを落とします.
    var intersect = function(nums1, nums2) {
      let tmp = [], arr = []
      if (nums1.length > nums2.length) {
        tmp = nums1
        nums1 = nums2
        nums2 = tmp
      }
      for(let key of nums1){
        temp = nums2.indexOf(key)
        if(temp > -1) {
          arr.push(key);
          nums2.splice(temp,1)
        }
      }
      return arr
    };
    
    関連リンク
    2つの配列の交叉