JavaScript 中的迴圈陣列中的下一個更大元素


迴圈陣列

迴圈陣列通常指陣列中最後一個元素的下一個元素是陣列的第一個元素。

顯然,沒有這樣的機制來儲存這樣的資料,資料仍然會儲存在連續的記憶體塊中,迴圈陣列更像是一個概念而不是現實。

問題

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

然後,該函式應該構造並返回一個數組,該陣列包含原始陣列中每個對應元素的下一個更大元素。某個數字(例如 num)的下一個更大數字是該陣列中按遍歷順序(在我們的例子中為向右)的第一個更大數字,這意味著我們可以迴圈搜尋以找到其下一個更大數字。如果不存在,則我們應該為該數字考慮 -1。

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

const arr = [7, 8, 7];

則輸出應為 -

const output = [8, -1, 8];

輸出解釋

陣列中兩個 7 的下一個更大數字都是 8,並且由於陣列是迴圈的,但對於 8,沒有更大的元素,因此我們為它放入 -1。

示例

程式碼將如下所示 -

 即時演示

const arr = [7, 8, 7];
const nextGreaterElement = (arr = []) => {
   const res = [];
   const stack = [];
   if (!arr || arr.length < 1){
      return res;
   };
   for (let i = 0; i < arr.length; i++) {
      while (stack.length > 0 && arr[stack[stack.length - 1]] < arr[i]) {
         const small = stack.pop();
         res[small] = arr[i];
      };
      stack.push(i);
   }
   for (let i = 0; i < arr.length; i++) {
      while (stack.length > 0 && arr[stack[stack.length - 1]] < arr[i]) {
         const small = stack.pop();
         res[small] = arr[i];
      };
   }
   const rem = stack.length;
   for (let i = 0; i < rem; i++) {
      res[stack.pop()] = -1;
      }
      return res;
   };
console.log(nextGreaterElement(arr));

程式碼解釋

在遍歷陣列時,如果我們找到一個大於堆疊中一個元素的元素,我們將 res[small] 設定為找到的當前較大元素。

現在,我們再次從 arr 的開頭開始,處理在之前的 for 迴圈中找不到下一個更大元素的元素。最後,仍然會有一些元素沒有找到下一個更大元素。

輸出

控制檯中的輸出將為 -

[8, -1, 8]

更新於: 2021年3月3日

229 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.