/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param nums int整型一维数组
 * @return int整型
 */
function findPeakElement(nums) {
    // write code here
    function getIndex(list, l, r) {
        if (l < r) {
            // 取中位数下标
            let mid = parseInt((l + r) / 2);
            let cur = list[mid];
            let last = list[mid - 1];
            let next = list[mid + 1];
            // console.log("last:", last, " cur:", cur, " next:", next);
            if (last < cur && cur > next) {
                // 若中位数大于两侧,则返回下标
                return mid;
            } else if (last < cur && cur < next) {
                // 若中位数大于左侧且小于右侧,则在右半边查找
                return getIndex(list, mid + 1, r);
            } else {
                // 其余情况,则在左半边查找
                return getIndex(list, l, mid);
            }
        } else if (l == r) {
            // 当搜索范围是1时,直接比较即可
            let cur = list[l];
            let last = list[l - 1];
            let next = list[l + 1];
            // console.log("last:", last, " cur:", cur, " next:", next);
            if (last < cur && cur > next) {
                // 若中位数大于两侧,则返回下标
                return l;
            } else {
                // 若中位数非峰值,则返回0
                return 0;
            }
        }
    }
    let len = nums.length;
    // 在数组最左侧和最右侧添加下溢哨兵,防止取数下标异常报错
    let index = getIndex([-100007, ...nums, -100007], 1, len);
    // console.log("index:", index);
    // 因为添加了边界哨兵,所以需要在得到的下标基础上减一
    return index - 1;
}
module.exports = {
    findPeakElement: findPeakElement,
};