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

相关推荐
小鹿撞出了脑震荡4 分钟前
「OC」源码学习—— 消息发送、动态方法解析和消息转发
学习·ios·objective-c
茯苓gao19 分钟前
stm32 串口通讯 和 USART学习 二(HEX和文本数据包收发)
stm32·嵌入式硬件·学习
cliff,22 分钟前
数据提取之BeautifulSoup4快速使用
笔记·python·学习
wang__1230034 分钟前
力扣2680题解
算法·leetcode·职场和发展
大刘讲IT35 分钟前
轻量化工业互联网平台在中小制造企业的垂直应用实践:架构、集成、数据价值与选型策略
大数据·学习·程序人生·架构·数据挖掘·能源·制造
Camellia031136 分钟前
嵌入式学习--江协51单片机day2
嵌入式硬件·学习·51单片机
郭尘帅66639 分钟前
SpringBoot学习(上) , SpringBoot项目的创建(IDEA2024版本)
spring boot·后端·学习
threelab1 小时前
02.three官方示例+编辑器+AI快速学习webgl_animation_skinning_blending
人工智能·学习·编辑器
GGBondlctrl1 小时前
【leetcode】《BFS扫荡术:如何用广度优搜索征服岛屿问题》
算法·leetcode·bfs·宽度优先·图像渲染·岛屿的数量·被围绕的区域
星沁城2 小时前
236. 二叉树的最近公共祖先
java·数据结构·leetcode·二叉树