寻找峰值——二分

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

给你一个整数数组 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
相关推荐
jvmind_dev4 分钟前
Java GC 实战指南(番外篇):被忽视的隐形杀手 —— Class Unloading 如何拖垮 GC
java·后端
可编程芯片开发6 分钟前
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
算法
An_s8 分钟前
机器学习python之识别图中物品信息
java·linux·开发语言
AI科技星15 分钟前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
小雪_Snow18 分钟前
JavaScript 中的三种常用事件
开发语言·前端·javascript
米罗篮18 分钟前
矩阵快速幂 (Exponentiation By Squaring Applied To Matrices)
c++·线性代数·算法·矩阵
肖爱Kun22 分钟前
C++设计策略模式
开发语言·c++·策略模式
dream_home840723 分钟前
图像算法模型NPU适配与算法服务实战指南
人工智能·python·算法·npu 图像服务
AIGS00129 分钟前
跨越语义鸿沟:企业本体语义平台的构建与落地
java·人工智能·python·机器学习·人工智能ai大模型应用
李可以量化33 分钟前
PTrade 量化策略实战:二八轮动策略深度解析(下)
python