在 JavaScript 中查詢大於其相鄰元素的元素


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

該函式應該查詢並返回陣列中的一個數字,該數字大於其右側和左側的直接數字。如果陣列中存在多個這樣的元素,我們的函式應該返回其中的任何一個。

例如:

如果輸入陣列是:

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

那麼輸出應該是:

const output = 9;

由於問題需要查詢峰值元素,我們可以使用二分查詢演算法的改進版本。

步驟如下:

  • 檢視任何元素。

  • 如果下一個元素和前一個元素都小於當前元素,則我們找到一個解決方案,然後返回當前元素的索引。

  • 如果下一個元素大於當前元素,則右側必須存在一個峰值,遞迴地向右查詢。

  • 如果前一個元素大於當前元素,則左側必須存在一個峰值,遞迴地向左查詢。

示例

以下是程式碼:

const arr = [3, 6, 7, 9, 8, 2, 5];
const greaterThanAdjacent = (arr = [], start = 0, end = arr.length) => {
   let mid = start + Math.floor((end - start) / 2);
   let curr = arr[mid];
   let prev = mid-1 < 0 ? -Infinity : arr[mid-1];
   let next = mid+1 > arr.length-1 ? -Infinity : arr[mid+1];
   if (curr > prev && curr > next){
      return arr[mid];
   }
   if (curr < next){
      return greaterThanAdjacent(arr, mid+1, end);
   }
   if (curr > next){
      return greaterThanAdjacent(arr, start, mid-1);
   }
   return null;
};
console.log(greaterThanAdjacent(arr));

輸出

以下是控制檯輸出:

9

更新於:2021年1月20日

388 次瀏覽

開啟你的職業生涯

完成課程獲得認證

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