【leetcode】852. 山脉数组的封顶索引

文章目录

    • 题目
    • 题解
      • [1. 遍历](#1. 遍历)
      • [2. 二分查找](#2. 二分查找)

题目

852. 山脉数组的封顶索引

给定一个长度为 n 的整数 山脉 数组 arr ,其中的值递增到一个 峰值元素 然后递减。

返回峰值元素的下标。

你必须设计并实现时间复杂度为 O(log(n)) 的解决方案。

示例 1:

输入:arr = [0,1,0]

输出:1

示例 2:

输入:arr = [0,2,1,0]

输出:1

示例 3:

输入:arr = [0,10,5,2]

输出:1

题解

1. 遍历

python 复制代码
class Solution(object):
    def peakIndexInMountainArray(self, arr):
        """
        :type arr: List[int]
        :rtype: int
        """
        for i in range(1, len(arr) -1):
            if arr[i] > arr[i + 1]:
                return i
        return False
            
        

2. 二分查找

python 复制代码
class Solution(object):
    def peakIndexInMountainArray(self, arr):
        """
        :type arr: List[int]
        :rtype: int
        """
        # 二分查找
        n = len(arr)
        left = 0
        right = n - 1
        ans = -1

        while left <= right:
            mid = (left + right) // 2
            if arr[mid] > arr[mid + 1]:
                ans = mid
                right = mid - 1
            else:
                left = mid + 1
        return ans