【算法】二分算法——寻找峰值

简介: 【算法】二分算法——寻找峰值

题解:寻找峰值(二分算法)


1.题目

题目链接:LINK

2.暴力求解

暴力求解的思路很简单,这个数组的形状无非就三种:

  • 一直上升
  • 下降(这里包含先下降后上升)
  • 先升后降

    总结一下规律:
    只要有下降,那么一定就是其中一个峰点了,实在一个数组里没有任何下降的,那就是最后一个数字的下标

然后代码就可以出炉了:时间复杂度:O(N)

class Solution {
public:
//暴力求解
    int findPeakElement(vector<int>& nums) 
    {
        for(size_t i = 0; i < nums.size() - 1; i++)
        {
            //出现下降
            if(nums[i] > nums[i+1]) return i;
        }
        return nums.size() - 1;
    }
};

细节:i的取值:

小细节就是i的取值是小于size() - 1,也就是说最多取到倒数第二个数,原因就是里面用到了mid + 1,如果mid可以取到最后一个数,那么mid + 1就是越界访问了。

3.二分算法

这个题目显然是提示咱们用二分算法了:

至于为什么可以用二分算法呢?

答案是具有二段性:

所以,我们可以得出二分代码:

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

4.总结

感觉这个题的二分重点是mid与其后面的一个数进行比较得结果,需要自己把握这一点才行。


EOF


相关文章
|
7月前
|
算法 程序员
【算法训练-二分查找 三】【特殊二分】寻找峰值
【算法训练-二分查找 三】【特殊二分】寻找峰值
67 0
|
算法 索引
|
7月前
|
存储 算法 搜索推荐
C语言第二十九练 三分算法求峰值
C语言第二十九练 三分算法求峰值
78 1
|
7月前
|
算法 JavaScript 索引
|
算法 测试技术 C#
C++二分算法的应用:寻找峰值原理、源码及测试用例
C++二分算法的应用:寻找峰值原理、源码及测试用例
|
7月前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 162. 寻找峰值 算法解析
☆打卡算法☆LeetCode 162. 寻找峰值 算法解析
|
机器学习/深度学习 算法
【MATLAB第25期】基于MATLAB的LSTM深度学习模型的自动检测时间序列数据峰值算法
【MATLAB第25期】基于MATLAB的LSTM深度学习模型的自动检测时间序列数据峰值算法
|
存储 算法 前端开发
前端算法-查找峰值
前端算法-查找峰值
|
算法 索引
数据结构与算法之数组寻找峰值&&分而治之
数据结构与算法之数组寻找峰值&&分而治之
179 0
数据结构与算法之数组寻找峰值&&分而治之
|
前端开发 算法 JavaScript
LeetCode寻找峰值使用JavaScript解题|前端学算法
LeetCode寻找峰值使用JavaScript解题|前端学算法
143 0
LeetCode寻找峰值使用JavaScript解题|前端学算法

热门文章

最新文章