在 JavaScript 中查詢陣列中的所有峰值及其位置


構建

假設我們在 JavaScript 中有以下陣列:

const arr = [4, 3, 4, 7, 5, 2, 3, 4, 3, 2, 3, 4];

如果我們將此陣列的點繪製在 y 軸上,每個相鄰點在 x 軸上相距單位距離,則圖形如下所示:

該圖清楚地表明,此陣列中存在兩個區域性最大值(峰值),分別位於索引 3 和 7 處,其值分別為 7 和 4。

問題

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

我們的函式應該返回一個物件,該物件包含兩個屬性,maximas 和 positions。

這兩個屬性都將是陣列,maxima 陣列將包含陣列中區域性最大值的值,而 positions 陣列將包含其對應的索引。

例如,如果函式的輸入為:

因此,對於上述陣列,輸出應如下所示:

const output = {
maximas: [7, 4],
positions: [3, 7]
};

示例

以下是程式碼:

 即時演示

const arr = [4, 3, 4, 7, 5, 2, 3, 4, 3, 2, 3, 4];
const findMaxima = (arr = []) => {
   let positions = []
   let maximas = []
   for (let i = 1; i < arr.length - 1; i++) {
      if (arr[i] > arr[i - 1]) {
         if (arr[i] > arr[i + 1]) {
            positions.push(i)
            maximas.push(arr[i])
         } else if (arr[i] === arr[i + 1]) {
            let temp = i
            while (arr[i] === arr[temp]) i++
            if (arr[temp] > arr[i]) {
               positions.push(temp)
               maximas.push(arr[temp])
            }
         }
      }
   }
   return { maximas, positions };
};
console.log(findMaxima(arr));

輸出

則輸出應為:

{ maximas: [ 7, 4 ], positions: [ 3, 7 ] }

更新於: 2021年4月21日

462 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.