在 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 次浏览

开启你的职业生涯

完成该课程即可获得认证

开始使用
广告
© . All rights reserved.