日拱一卒(16)——leetcode学习记录:山脉数组峰值索引

一、题目

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

返回峰值元素的下标。

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

二、分析

要求是O(log(n))的时间复杂度,那么应该采用二分法。具体是找到最大的元素的一半,直至找到峰顶元素。这里实现的细节值得推敲,包括终止条件、判断条件的设置。

O(log(n))的时间复杂度的理解,假设k次二分后范围缩小到1,那么n/2^k = 1,可以求解k是log2(n)

三、题解

class Solution:

def peakIndexInMountainArray(self, arr: Listint) -> int:

left,right = 0,len(arr)-1

while left+1 < right:

mid = (left+right)//2

if arrmid < arrmid+1:

left = mid

else:

right = mid

return right

相关推荐
罗湖老棍子2 小时前
Biorhythms(信息学奥赛一本通- P1639)
算法·数论·裴蜀定理·扩展欧几里得·扩展中国剩余定理
爱倒腾的老唐7 小时前
0、元器件——电阻
学习
sunshine22 girl7 小时前
Java学习七 Java 项目实战2-注册业务
java·学习
奋发向前wcx8 小时前
CSP-J复赛模拟赛4 王晨旭补题 2026.10.5
算法
sunshine22 girl9 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
传奇开心果编程10 小时前
【SwiftUI提高练中学】第8课 网络层架构:拦截器、重试、缓存与离线优先
学习·macos·ui·ios·swiftui
一条破秋裤10 小时前
内核驱动的意义与课程学习规划
学习
念何架构之路10 小时前
zap采样器与性能优化内幕
算法·性能优化·哈希算法
Bug收容所11 小时前
学习LangChain day1
学习·langchain·llm·agent
传奇开心果编程11 小时前
【现代声明式UI学与练】第7课 组件通信——父传子、子传父、跨层级通信、状态提升与 Context
学习·flutter·react native·ui·swiftui·android jetpack