JavaScript 中最大遞減相鄰元素


給定的問題陳述要求我們藉助 JavaScript 功能找出最大遞減相鄰元素。這個問題可以用 JavaScript 中一個簡單的演算法來解決。

理解邏輯

更詳細地解釋問題陳述的邏輯。

問題要求我們獲取陣列中最大數量的遞減相鄰項,或者可以說我們必須在輸入陣列中找到最長的遞減子陣列。

因此,為了解決這個問題,我們需要遍歷整個陣列,一次處理一個元素,並使用名為 count 的變數跟蹤當前遞減最近元素的計數。因此,我們將遇到一組遞減的相鄰元素。然後我們將增加計數。

否則,相鄰元素不是遞減順序,因此我們將檢查當前計數是否大於當前 maxCount(最初設定為 0)。如果此條件為真,我們將 maxCount 更新為當前計數。然後我們將計數重置為 0。因為我們已經找到了一組非遞減的專案,並且當前遞減相鄰元素的子陣列將結束。

演算法

步驟 1:在演算法開始時,我們將定義一個名為“maxDecreasingAdjacent”的函式。此函式將查詢陣列中元素的遞減相鄰元素。

步驟 2:然後函式將透過初始化兩個計數變數(名為 maxCount 和 count)開始。這兩個變數都已初始化為 0。

步驟 3:現在轉到第二步,我們將初始化一個 for 迴圈來迭代輸入陣列中存在的所有專案。為了跟蹤元素,我們在步驟 2 中已經定義了計數變數。

步驟 4:在這個階段,每當我們遇到兩個遞減的相鄰元件時,我們都會增加計數。當我們遇到兩個不相鄰的元素時,我們會確定當前計數是否超過當前 maxCount。

步驟 5:如果是,我們將調整 maxCount 以反映最新的計數。由於我們接觸到一對非遞減的相鄰元素,因此當前遞減相鄰元素的子陣列已終止,因此我們將計數重置為 0。

步驟 6:在最後一步,我們將從陣列中獲取遞減相鄰元素的結果。

示例

// function to find decreasing adjacent
function maxDecreasingAdjacent(arr) {
    // object to store the decreasing adjacent
    let maxCount = 0;
    let count = 0;
    // initialize a loop till the length of array
    for (let i = 1; i < arr.length; i++) {
      if (arr[i] < arr[i-1]) {
        count++;
      } else {
        if (count > maxCount) {
          maxCount = count;
        }
        count = 0;
      }
    }
    if (count > maxCount) {
      maxCount = count;
    }
    return maxCount;
  }
 
  //define two different arrays
  const array1 = [5, 4, 3, 2, 1];
  const array2 = [1, 2, 3, 4, 5];
  const adjacent1 = maxDecreasingAdjacent(array1);
  const adjacent2 = maxDecreasingAdjacent(array2);
  //print the output
  console.log(`For ${array1} the decreasing adjacent is ${adjacent1}`);
  console.log(`For ${array2} the decreasing adjacent is ${adjacent2}`);

輸出

For 5,4,3,2,1 the decreasing adjacent is 4
For 1,2,3,4,5 the decreasing adjacent is 0

上述演算法採用兩種陣列,一種是 array1,另一種是 array2。函式 maxDecreasingAdjacent 中的輸入陣列是整數陣列。對於該輸入陣列,我們需要找到最大數量的遞減相鄰元素。該函式返回陣列中最長遞減子陣列的長度。

輸出顯示了問題,如果輸入陣列為 [5, 4, 3, 2, 1],則函式返回結果 4,因為陣列中有 4 個遞減相鄰項。在第二個陣列 [1, 2, 3, 4, 5] 中,函式返回 0 作為輸出,因為其中沒有遞減元素。如果輸入陣列為 [5, 4, 3, 2, 1, 3, 2, 1],則函式將再次返回 4,因為最長的遞減子陣列是 [5, 4, 3, 2]。

時間複雜度

時間和空間複雜度是我們用來判斷演算法效率的兩個指標。在上面的程式碼中,我們發現複雜度為 O(n)。因為它恰好只考慮陣列中每個遞減相鄰項的子陣列一次,並跟蹤所見最長子陣列的長度,因此此技術是有效的。該演算法只需要遍歷陣列一次,因此其時間複雜度為 O(n)。

結論

這就是我們如何解決上述問題陳述中提出的問題。確定陣列的遞減相鄰元素的最簡單和最準確的方法。我們可以使用簡單的 O(n) JavaScript 演算法來計算陣列中最大數量的遞減相鄰成員。

更新於:2023年8月23日

143 次檢視

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告