LeetCode LCR 069. 山脉数组的峰顶索引

题目描述

LCR 069. 山脉数组的峰顶索引

思路分析

解法一:二分查找(推荐)

核心思路

  • 山脉数组满足先增后减,峰顶位置左右趋势相反。
  • arr[mid] < arr[mid+1],峰顶在右侧;否则在左侧(包含 mid)。
  • 通过二分将区间收缩到峰顶位置。

复杂度分析

  • 时间复杂度:O(log n),其中 n 表示数组长度。
  • 空间复杂度:O(1),仅使用常数额外空间。
class Solution {
    public int peakIndexInMountainArray(int[] arr) {
        int left = 0;
        int right = arr.length - 1;

        while (left < right) {
            int mid = left + (right - left) / 2;

            // 根据上升或下降趋势缩小区间
            if (arr[mid] < arr[mid + 1]) {
                left = mid + 1;
            } else {
                right = mid;
            }
        }

        return left;
    }
}
func peakIndexInMountainArray(arr []int) int {
    left, right := 0, len(arr)-1

    for left < right {
        mid := left + (right-left)/2

        // 根据上升或下降趋势缩小区间
        if arr[mid] < arr[mid+1] {
            left = mid + 1
        } else {
            right = mid
        }
    }

    return left
}

相似题目

题目 难度 考察点
162. 寻找峰值 中等 二分查找
153. 寻找旋转排序数组中的最小值 中等 二分查找
33. 搜索旋转排序数组 中等 二分查找
35. 搜索插入位置 简单 二分查找
69. x 的平方根 简单 二分查找
本文作者:
本文链接: https://hgnulb.github.io/blog/2026/82024887
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!