leetcode - 852. Peak Index in a Mountain Array

Description

An array arr a mountain if the following properties hold:

arr.length >= 3
There exists some i with 0 < i < arr.length - 1 such that:
arr[0] < arr[1] < ... < arr[i - 1] < arr[i] 
arr[i] > arr[i + 1] > ... > arr[arr.length - 1]
Given a mountain array arr, return the index i such that arr[0] < arr[1] < ... < arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[arr.length - 1].

You must solve it in O(log(arr.length)) time complexity.

Example 1:

Input: arr = [0,1,0]
Output: 1

Example 2:

Input: arr = [0,2,1,0]
Output: 1

Example 3:

Input: arr = [0,10,5,2]
Output: 1

Constraints:

3 <= arr.length <= 10^5
0 <= arr[i] <= 10^6
arr is guaranteed to be a mountain array.

Solution

Use binary search to solve this problem. For any middle index, it either locates at the left of the peak, or the right of the peak. If at the left, then discard the left half, otherwise discard the right half.

Time complexity: o ( log ⁡ n ) o(\log n) o(logn)

Space complexity: o ( 1 ) o(1) o(1)

Code

python3 复制代码
class Solution:
    def peakIndexInMountainArray(self, arr: List[int]) -> int:
        left, right = 0, len(arr) - 1
        while left < right:
            mid = (left + right) >> 1
            if arr[mid - 1] < arr[mid] < arr[mid + 1]:
                left = mid + 1
            elif arr[mid - 1] > arr[mid] > arr[mid + 1]:
                right = mid
            else:
                return mid
相关推荐
CHANG_THE_WORLD10 分钟前
Linux 基础 6.进程
java·linux·运维
生信与遗传解读23 分钟前
XGBoost算法在自定义数据集中预测疾病风险
人工智能·python·算法·数据分析
这辈子秃头是不可能的30 分钟前
OpenGL利用DDA算法绘制图形,并增加鼠标键盘交互
算法·计算机外设·交互
程序员谷美30 分钟前
Redis 性能优化:利用 MGET 和 Pipeline 提升效率
java·redis·性能优化
Heavydrink1 小时前
JSP内置对象、Servlet与MVC
java·servlet·mvc
Lucky_Turtle1 小时前
【SpringSecurity】二、自定义页面前后端分离
java
雨 子1 小时前
SpringBoot环境和Maven配置
java·spring boot·后端·java-ee·maven
zyplanke1 小时前
Spring配置文件中:密码明文改为密文处理方式(通用方法)
java·后端·spring
暮湫1 小时前
集合源码的常见问题
java
计算机毕设指导61 小时前
基于Springboot的景区民宿预约系统【附源码】
java·开发语言·spring boot·后端·mysql·spring·intellij idea