Welcome to 9ilk's Code World
(๑•́ ₃ •̀๑) 个人主页: 9ilk
(๑•́ ₃ •̀๑) 文章专栏: 算法Journey
本篇博客我们继续来了解一些有关二分查找算法的进阶题目。
🏠 寻找峰值
📌 题目内容
📌 题目解析
- 与山脉数组那道题不同的是,本题数组内存在多个峰值。
- 注意本题一个规定,即num[-1] = num[n] = 负无穷,数组边界都是最小负无穷。
📌算法原理
📒 思路一:暴力解法
有三种情况下,某个数是峰值,我们暴力解法只需要遍历一遍数组进行分类情况即可,但是时间复杂度是O(N)不符合题意。
📒 思路二:二分查找
我们发现:
1. 当arr[i] > arr[i+1]时,此时左边区域一定存在峰值,因此我们要向左缩小范围。
2.当arr[i] < arr[i+1]时,此时右边区域一定存在峰值,因此我们要向右缩小范围。
3.由于峰值位置的不确定我们需要寻找峰值,因此在寻找峰值的过程中,我们发现