日拱一卒(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

相关推荐
旺仔仔仔5 小时前
# 机器人项目实战(1):选相机、试深度,再到手眼标定
算法
CoderYanger5 小时前
A.每日一题:1614. 括号的最大嵌套深度
java·程序人生·算法·leetcode·面试·学习方法
yuki蜜语6 小时前
别只会调包跑模型!一文讲透大模型训练底层的“递推、递归、三明治”三重逻辑
算法
JWASX6 小时前
Java 转 go 学习 - GRPC(1)
学习·golang
成旭先生6 小时前
银行卡识别 API:一张照片读出卡号、BIN 与发卡行
人工智能·算法·ocr·api接口·金融科技·银行卡识别·支付风控
陌上花开缓缓归以6 小时前
mebdlts3.4.1安全启动全流程
服务器·算法
鬼手点金6 小时前
opencode-全能开发者配置
java·linux·服务器·前端·javascript·学习·前向传播
Nebula_g6 小时前
JavaSE拓展:可变参数
java·开发语言·算法·安全·javase·可变参数
129Lab6 小时前
BMS 核心算法:SOC 估算从安时积分到 LSTM-UKF 串级融合的 30 年演进(附 Python 实现)
python·算法·lstm·python3.11·bms·soc估算
kgkg6 小时前
我通过逆向学到了douyin的美颜算法
算法