zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【Leetcode刷题Python】852. 山脉数组的峰顶索引

2023-09-14 09:12:59 时间

1 题目

符合下列属性的数组 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

2 解析

用二分查找的话,时间复杂度是Log(n)。思路是

  • 中间值大于后一个值的话,意思是已经爬坡过了峰值,那峰值一定在左边部分
  • 中间值小于后一个值的话,还在爬坡,峰值在右部分

3 Python实现

class Solution:
    def peakIndexInMountainArray(self, arr: List[int]) -> int:
        left,right = 0,len(arr)-1
        result = 0
        while left<=right:
            mid = (left+right)//2
            if arr[mid]>arr[mid+1]:
                result = mid
                right = mid-1
            else:
                left = mid+1
        return result