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

一.网页直达

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;
    }
};

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

相关推荐
你撅嘴真丑3 小时前
第九章-数字三角形
算法
uesowys4 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
ValhallaCoder4 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
董董灿是个攻城狮4 小时前
AI 视觉连载1:像素
算法
智驱力人工智能4 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
孞㐑¥5 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
月挽清风5 小时前
代码随想录第十五天
数据结构·算法·leetcode
XX風5 小时前
8.1 PFH&&FPFH
图像处理·算法
NEXT066 小时前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法
代码游侠6 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法