寻找峰值--优选算法(二分查找法)

一.网页直达

https://leetcode.cn/problems/find-peak-element

二.题目解析

解析:

题目上给出的时间复杂度就暗示我们需要使用二分算法,我们发现相邻位置没有相同的数字.

我们先来想暴力解法:遍历数组,利用单调性的变化来判断是否是峰值,或者是单调不变的那峰值就是第一个数或者是最后一个数.(一共三种情况),时间复杂度就是O(N)

我们抽象出一个模型出来,找到二段性,使用二分查找.

情况一就是arr[mid]>arr[mid+1],说明结果一定在二段性的左边.while更新右边区间right=mid,继续寻找峰值.

情况二:就是arr[mid]<arr[mid+1],说明结果一定在二段性的右边.while更新左边区间left=mid+1,继续寻找峰值.

代码实现:

cpp 复制代码
class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        int left=0,right=nums.size()-1;
        while(left<right)
        {
            int mid =left+(right-left)/2;
            if(nums[mid]>nums[mid+1])right=mid;
            else left=mid+1;
        }
    return left;
    }
};

二分法不是只在单调区间里面的,只需要找到二段性,就可以使用.

相关推荐
华农DrLai几秒前
什么是自动Prompt优化?为什么需要算法来寻找最佳提示词?
人工智能·算法·llm·nlp·prompt·llama
黎阳之光1 分钟前
十五五智赋新程 黎阳之光以AI硬核技术筑造产业数智底座
大数据·人工智能·算法·安全·数字孪生
2401_891482172 分钟前
C++中的原型模式
开发语言·c++·算法
皙然3 分钟前
深度解析三色标记算法:JVM 并发 GC 的核心底层逻辑
java·jvm·算法
sali-tec5 分钟前
C# 基于OpenCv的视觉工作流-章40-特征找图
图像处理·人工智能·opencv·算法·计算机视觉
wearegogog1235 分钟前
毫米波MIMO系统仿真中混合预编码的交替最小化算法
算法·预编码算法
油泼辣子多加6 分钟前
【DL】Transformer算法应用
人工智能·深度学习·算法·机器学习·transformer
2301_795741796 分钟前
C++中的代理模式变体
开发语言·c++·算法
fof9207 分钟前
Base LLM | 从 NLP 到 LLM 的算法全栈教程 第二天
人工智能·算法·自然语言处理
2301_789015627 分钟前
封装RBTree(红黑树)实现myset和mymap
开发语言·数据结构·c++·算法·r-tree