使用 JavaScript 計算陣列中山脈的最大長度


山脈子序列

如果以下屬性成立,我們將任何(連續的)子陣列 sub(arr)稱為山脈 -

  • sub.length >= 3

  • 存在一些 0 < i < sub.length - 1 使得 sub[0] < sub[1] < ... sub[i-1] < sub[i] > B[i+1] > ... > sub[sub.length - 1]

問題

我們需要編寫一個 JavaScript 函式,該函式將陣列 arr 作為第一個且唯一的引數。

我們的函式應該返回陣列 arr 中存在的最大山脈子序列的長度(如果存在),否則返回 0。

例如,如果函式輸入為

輸入

const arr = [3, 2, 5, 8, 4, 3, 6];

輸出

const output = 5;

輸出說明

因為所需的子陣列是 −

[2, 5, 8, 4, 3]

示例

以下是程式碼 −

 即時演示

const arr = [3, 2, 5, 8, 4, 3, 6];
const mountainLength = (arr = []) => {
   let max = 0
   for(let left = 0; left < arr.length; left++) {
      let right = left
      while(arr[right] < arr[right + 1]) {
         right++
      }
      const top = right
      while(right > left && arr[right] > arr[right + 1]) {
         right++
      }
      if(right > top && top > left) {
         max = Math.max(max, right - left + 1)
         left = right
         left--
      }
   }
   return max
}
console.log(mountainLength(arr));

輸出

5

更新於: 2021 年 4 月 24 日

193 次瀏覽

開啟你的 職業生涯

完成課程,獲得認證

開始
廣告
© . All rights reserved.