日拱一卒(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: List[int]) -> int:

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

while left+1 < right:

mid = (left+right)//2

if arr[mid] < arr[mid+1]:

left = mid

else:

right = mid

return right

相关推荐
不想看见40410 分钟前
Single Number位运算基础问题--力扣101算法题解笔记
数据结构·算法
靠沿13 分钟前
【优选算法】专题十二——栈
算法
ByNotD0g17 分钟前
Doris 学习笔记
android·笔记·学习
困死,根本不会24 分钟前
Qt Designer 基础操作学习笔记
开发语言·笔记·qt·学习·microsoft
WJSKad123531 分钟前
Focus瓶颈轻量化改进YOLOv26通道压缩与残差学习协同突破
学习·yolo
愚者游世40 分钟前
<algorithm> 中 remove、remove_if、remove_copy、remove_copy_if 详解
c++·学习·程序人生·职场和发展·visual studio
云边散步41 分钟前
godot2D游戏教程系列二(13)
笔记·学习·游戏·游戏开发
无心水42 分钟前
【任务调度:框架】10、2026最新!分布式任务调度选型决策树:再也不纠结选哪个
人工智能·分布式·算法·决策树·机器学习·架构·2025博客之星
gameboy03142 分钟前
网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。
爬虫·学习·selenium
小蜗牛~向前冲44 分钟前
大模型学习系列-Embedding与向量数据库
人工智能·python·神经网络·学习·机器学习·embedding