JavaScript中不同字串的相似之處


我們有兩個數字陣列,需要編寫一個intersection()函式來計算它們的交集,並返回一個包含交集元素的陣列(順序任意)。結果中的每個元素應該出現的次數與它在兩個陣列中出現的次數相同。

例如

如果輸入為:

arr1 = ['hello', 'world', 'how', 'are', 'you'];
arr2 = ['hey', 'world', 'can', 'you', 'rotate'];

則輸出應為:

['world', 'you'];

方法

如果陣列已排序,我們可以使用雙指標法,初始時兩個指標都指向各自陣列的開頭(0),然後我們可以透過增加相應的指標來繼續,這在時間上將是O(m+n)的複雜度,其中m和n是陣列的大小。

但是由於我們有未排序的陣列,因此對陣列進行排序然後使用這種方法是沒有意義的,我們將檢查第一個陣列中的每個值與第二個陣列,並構造一個交集陣列。

這將花費我們O(n^2)的時間。

因此,讓我們為這個函式編寫程式碼:

示例

程式碼如下:

arr1 = ['hello', 'world', 'how', 'are', 'you'];
arr2 = ['hey', 'world', 'can', 'you', 'rotate'];
const intersectElements = (arr1, arr2) => {
   const res = [];
   const { length: len1 } = arr1;
   const { length: len2 } = arr2;
   const smaller = (len1 < len2 ? arr1 : arr2).slice();
   const bigger = (len1 >= len2 ? arr1 : arr2).slice();
   for(let i = 0; i < smaller.length; i++) {
      if(bigger.indexOf(smaller[i]) !== -1){
         res.push(smaller[i]);
         bigger.splice(bigger.indexOf(smaller[i]), 1, undefined);
      }

   };
   return res;
};
console.log(intersectElements(arr1, arr2));

輸出

控制檯輸出將為:

[ 'world', 'you' ]

更新於:2020年10月19日

79 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.