在 JavaScript 中查詢已經旋轉的排序陣列中的最小元素


我們需要編寫一個 JavaScript 函式,該函式僅將一個整數陣列作為唯一引數。

首先對陣列進行排序,然後將其按任意數量的元素進行旋轉。我們的函式應該找出陣列中的最小元素並返回該元素。

唯一的條件是,我們必須在低於線性時間複雜度的條件下執行此操作,也許可以使用經過調整的二分查詢演算法。

例如 -

如果輸入陣列是 -

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

則輸出應為 2。

範例

以下是程式碼 -

const arr = [6, 8, 12, 25, 2, 4, 5];
const findMin = (arr = []) => {
   let temp;
   let min = 0;
   let max = arr.length - 1;
   let currentMin = Number.POSITIVE_INFINITY;
   while (min <= max) {
      temp = (min + max) >> 1;
      currentMin = Math.min(currentMin, arr[temp]);
      if (arr[min] < arr[temp] && arr[temp] <= arr[max] || arr[min] > arr[temp]) {
         max = temp - 1;
      } else if (arr[temp] === arr[min] && arr[min] === arr[max]) {
         let guessNum = arr[temp];
         while (min <= max && arr[min] === guessNum) {
            min++;
         }
      } else {
         min = temp + 1;
      }
   }
   return currentMin;
};
console.log(findMin(arr));

輸出

以下是控制檯輸出 -

2

更新時間: 2021 年 1 月 19 日

109 次瀏覽

開啟你的職業生涯

完成該課程即可獲得認證

開始使用
廣告