日拱一卒(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 小时前
Oracle 19c入门学习教程,从入门到精通,PL/SQL 编程详解:语法、使用方法与综合案例(6)
sql·学习·oracle
richxu202510014 小时前
嵌入式学习之路->stm32篇-->(8)I2C通讯(上)
stm32·嵌入式硬件·学习
wen__xvn4 小时前
牛客周赛 Round 127
算法
行业探路者4 小时前
如何利用二维码提升富媒体展示的效果?
大数据·人工智能·学习·产品运营·软件工程
大锦终4 小时前
dfs解决FloodFill 算法
c++·算法·深度优先
生擒小朵拉4 小时前
ROS1学习笔记(一)
笔记·学习
丝斯20114 小时前
AI学习笔记整理(52)——大模型之Agent 智能体
人工智能·笔记·学习
橘颂TA4 小时前
【剑斩OFFER】算法的暴力美学——LeetCode 200 题:岛屿数量
算法·leetcode·职场和发展
苦藤新鸡4 小时前
14.合并区间(1,3)(2,5)=(1,5)
c++·算法·leetcode·动态规划
程序员-King.4 小时前
day145—递归—二叉树的右视图(LeetCode-199)
算法·leetcode·二叉树·递归