基於JavaScript,根據當前元素和前一個元素的差值對已排序陣列進行分組


在給定的問題陳述中,我們必須利用JavaScript的功能,根據當前元素和前一個元素之間的差值對已排序陣列進行分組。為了根據當前項和前一項之間的差值對已排序陣列進行分組,我們可以遍歷陣列並建立一個新的分組陣列。

理解問題陳述

上述問題陳述指出,我們必須根據陣列中當前元素和前一個元素之間的差值找出元素組。由於我們得到的是一個已排序陣列,因此我們需要根據每個元素與其前一個元素之間的差值對其元素進行分組。簡單來說,每當連續元素之間的差值大於1時,我們就建立一個新的組。輸出應該是一個分組陣列,其中每個組包含連續元素之間的差值小於等於1的元素。

例如,假設我們有一個類似於[1, 2, 3, 5, 7, 9]的陣列,那麼我們將建立的函式應該輸出[ [ 1, 2, 3 ], [ 5, 7, 9 ] ]。在這裡我們可以看到1和2之間的差值為1,同樣2和3之間的差值也是1。因此,考慮到相同的差值,我們將它們組合成一個組[1, 2, 3]。

演算法

步驟1:為了解決根據當前元素和前一個元素之間的差值對已排序陣列進行分組的給定問題,我們必須建立一個空陣列來儲存組。

步驟2:我們將使用一個變數來跟蹤當前組。

步驟3:然後遍歷已排序陣列的元素,對於每個元素,我們將計算當前元素和前一個元素之間的差值。

步驟4:如果差值大於1,則建立一個新組並將當前元素包含在現有組中。

示例

//function to get the group array by difference
function groupByDiff(arr) {
   //Check if the provided array is empty 
   if (arr.length === 0) {
      return [];
   }
   //Initialize a variable to store the result
   const result = [];
   let currGroup = [arr[0]];

   for (let i = 1; i < arr.length; i++) {
      const diff = arr[i] - arr[i - 1];

      if (diff <= 1) {
         currGroup.push(arr[i]);
      } else {
         result.push(currGroup);
         currGroup = [arr[i]];
      }
   }

   result.push(currGroup);

   return result;
}

const sortedArray = [1, 2, 3, 5, 7, 9, 10, 14, 16, 17, 20, 21, 23];
const groupedArray = groupByDiff(sortedArray);

console.log(groupedArray);

輸出

[
    [ 1, 2, 3 ], [ 5 ],
    [ 7 ],       [ 9, 10 ],
    [ 14 ],      [ 16, 17 ],
    [ 20, 21 ],  [ 23 ]
]

複雜度

提供的程式碼的時間複雜度為O(n)。這裡n是陣列中的元素個數。這種複雜度的原因是該函式遍歷陣列一次,並且對每個元素執行恆定時間操作。

在最壞情況下,程式碼的空間複雜度為O(m)。因為輸入陣列中的所有元素的差值都大於1,並且每個元素都在一個單獨的組中,因此m等於輸入陣列的大小。如果元素之間的差值通常較小,則組的數量會更少。這裡m是結果陣列中組的數量。

結論

總之,該程式碼有效地根據連續元素之間的差值對已排序陣列進行分組。它遍歷陣列一次,每當元素之間的差值大於1時就建立組。該程式碼提供了正確的元素分組,具有線性時間複雜度,使得程式碼高效。

更新於:2023年8月14日

390 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始
廣告