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

开启你的职业生涯

完成课程获得认证

开始学习
广告