一.题目描述:
我们把符合下列属性的数组 A 称作山脉:
A.length >= 3
存在 0 < i < A.length - 1 使得A[0] < A[1] < … A[i-1] < A[i] > A[i+1] > … > A[A.length - 1]
给定一个确定为山脉的数组,返回任何满足 A[0] < A[1] < … A[i-1] < A[i] > A[i+1] > … > A[A.length - 1] 的 i 的值。
示例 1:
输入:[0,1,0]
输出:1
示例 2:
输入:[0,2,1,0]
输出:1
提示:
3 <= A.length <= 10000
0 <= A[i] <= 10^6
A 是如上定义的山脉
二.js代码实现:
1.实现思路:
(1)直接调用js中的max函数返回最大值处的索引
(2)使用二分法的方法
2.js代码:
(1)直接调用js的api:
/**
* @param {number[]} A
* @return {number}
*/
var peakIndexInMountainArray = function(A) {
return A.indexOf(Math.max(...A));
};
(2)二分法实现:
/**
* @param {number[]} A
* @return {number}
*/
var peakIndexInMountainArray = function(A) {
if (A.length === 3) {
return 1;
}
let left = 0;
let right = A.length - 1;
let mid;
while (left < right) {
mid = Math.floor((left + right) / 2);
if (A[mid] < A[mid + 1]) {
left = mid + 1;
}
else {
right = mid;
}
}
return left;
};