寻找峰值——二分

峰值元素是指其值严格大于左右相邻值的元素。

给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。

你可以假设 nums[-1] = nums[n] = -∞

你必须实现时间复杂度为 O(log n)的算法来解决此问题。

示例 1:

复制代码
输入:nums = [1,2,3,1]
输出:2
解释:3 是峰值元素,你的函数应该返回其索引 2。
  • 对于所有有效的 i 都有 nums[i] != nums[i + 1]

思路:

二分。从mid点开始爬坡,只要是向上走(numsmid<pre 、 numsmid<after),在这个向上的部分,一定会出现峰值(即便一直递增爬坡,边界也会是峰值)

python 复制代码
from typing import List


class Solution:
    def findPeakElement(self, nums: List[int]) -> int:
        left,right=0,len(nums)-1
        while left<=right:
            mid=left+(right-left)//2
            pre=nums[mid-1] if mid>0 else -float('inf')
            after=nums[mid+1] if mid<len(nums)-1 else -float('inf')
            if nums[mid]>pre and nums[mid]>after:
                return mid
            elif nums[mid]<after:
                left=mid+1
            else:
                right=mid-1
        return -1
相关推荐
兵慌码乱1 小时前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
咖啡八杯2 小时前
GoF设计模式——策略模式
java·后端·spring·设计模式
hboot2 小时前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
To_OC5 小时前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode
顾林海7 小时前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
用户1285261160210 小时前
我把祖传Java项目重构后,接口响应从3s砍到了200ms,只改了这几行代码
java
鱼鱼不愚与10 小时前
《原来如此 | 第01期:为什么导航软件能预测红绿灯倒计时?》
算法
Linsk10 小时前
组件 = 模板 + 业务逻辑
java·前端·vue.js
呱呱复呱呱10 小时前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django