山脉数组的峰顶索引 ---- 二分查找

题目链接

题目:

分析:

  • 我们很明显, 可以从峰值位置将数组分成两段, 具有**"二段性",** 所以可以用二分查找
  • 因为arr是山峰数组, 不存在相等的情况
  • 如果arr[mid] > arr[mid + 1], 说明mid的位置可能是峰值, 移动right = mid
  • 如果arr[mid] < arr[mid + 1], 说明mid的位置一定不是峰值, 移动left = mid + 1
  • 所以可以匹配二分查找中的模版二, 此时,mid = left + (right - left) /2
  • 因为没有等于的情况, 所以模版三也适用:
  • 如果arr[mid] > arr[mid - 1], 说明mid的位置可能是峰值, 移动left = mid
  • 如果arr[mid] < arr[mid - 1], 说明mid的位置一定不是峰值, 移动right = mid - 1
  • 所以可以匹配二分查找中的模版三, 此时,mid = left + (right - left + 1) /2

代码:

java 复制代码
class Solution {
    public int peakIndexInMountainArray(int[] arr) {
        int left = 1;
        int right = arr.length-2;
        while(left < right){
            ///int mid = left + (right - left) / 2;
            //if(arr[mid] > arr[mid + 1]) right = mid;
            //else left = mid + 1 ;
            int mid = left + (right - left + 1) / 2;
            if(arr[mid] > arr[mid - 1]) left = mid;
            else right = mid - 1;
        }
        return left;
    }
}
相关推荐
励ℳ10 小时前
机器学习-LASSO算法指南
人工智能·算法·机器学习
Vic1010110 小时前
算法D1-20260212:双指针专题
java·数据结构·算法
仟濹10 小时前
【算法打卡day7(2026-02-12 周四)算法:BFS and BFS】10__卡码网110_字符串迁移, 11_卡码网105_有向图的完全连通
算法·深度优先·dfs·bfs·宽度优先
9359610 小时前
机考24 翻译18 单词11
c语言·数据结构·算法
爱思德学术11 小时前
中国计算机学会(CCF)推荐学术会议-B(计算机体系结构/并行与分布计算/存储系统):SPAA 2026
算法
11 小时前
2.12矩阵问题,发牌,数字金字塔
线性代数·算法·矩阵
无聊的小坏坏11 小时前
一文讲通:二分查找的边界处理
数据结构·c++·算法
m0_5287490011 小时前
C语言错误处理宏两个比较重要的
java·linux·算法
TracyCoder12312 小时前
LeetCode Hot100(50/100)——153. 寻找旋转排序数组中的最小值
算法·leetcode·职场和发展