栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

山脉数组的峰顶索引(二分查找 , java)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

山脉数组的峰顶索引(二分查找 , java)

符合下列属性的数组 arr 称为 山脉数组 :
arr.length >= 3
存在 i(0 < i < arr.length - 1)使得:
arr[0] < arr[1] < … arr[i-1] < arr[i]
arr[i] > arr[i+1] > … > arr[arr.length - 1]
给你由整数组成的山脉数组 arr ,返回任何满足 arr[0] < arr[1] < … arr[i - 1] < arr[i] > arr[i + 1] > … > arr[arr.length - 1] 的下标 i 。

示例 1:

输入:arr = [0,1,0]
输出:1
示例 2:

输入:arr = [0,2,1,0]
输出:1
示例 3:

输入:arr = [0,10,5,2]
输出:1
示例 4:

输入:arr = [3,4,5,1]
输出:2
示例 5:

输入:arr = [24,69,100,99,79,78,67,36,26,19]
输出:2

提示:

3 <= arr.length <= 104
0 <= arr[i] <= 106
题目数据保证 arr 是一个山脉数组

主要是利用二分查找找山顶元素,
1 当arr[mid]

2 arr[mid] >=arr[mid + 1] , 即,mid可能为峰顶,但是左边依旧有可能存在山顶,所以下一个搜索的区间为【left, mid】

循环的条件为while(left < right) left 严格小于right ,最后跳出循环是,一定是left = right

class Solution {
    public int peakIndexInMountainArray(int[] arr) {
        int left = 0 ,right = arr.length -1 ;
        while(left < right){
            int mid = left + ((right - left) >>1);
            if(arr[mid]
                left = mid + 1;
            }else {
                right = mid;
            }
        }
        return left;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/885150.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号