我们需要编写一个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