【二分法】寻找峰值


求解代码

因为本题假设nums[-1]=nums[n]=-∞,所以,只要数组中存在一个元素比相邻的元素大,那么沿着它就一定可以找到一个峰值。

使用二分查找,比较mid和mid+1位置的值,如果mid位置的值更大,则左侧存在峰值;

如果mid+1位置的值更大,则右侧存在峰值。

java 复制代码
public int findPeakElement (int[] nums) {
        int left = 0;
		int right = nums.length;

		while(left<right){
			int mid = left+((right-left)>>1);
			if(nums[mid]>nums[mid+1]){
				right=mid;
			}else{
				left=mid+1;
			}
		}
		return left;
    }

注意⚠️:

这里说明一下为什么无序数组也能使用二分查找,主要是这道题通过比较nums[mid]和nums[mid+1],可以确定峰值的位置区间,这满足二分的核心条件,所以无序也能用二分。

相关推荐
u01092727117 小时前
C++中的RAII技术深入
开发语言·c++·算法
2401_8321319518 小时前
模板错误消息优化
开发语言·c++·算法
金枪不摆鳍18 小时前
算法--二叉搜索树
数据结构·c++·算法
近津薪荼18 小时前
优选算法——双指针6(单调性)
c++·学习·算法
helloworldandy19 小时前
高性能图像处理库
开发语言·c++·算法
2401_8365631819 小时前
C++中的枚举类高级用法
开发语言·c++·算法
bantinghy19 小时前
Nginx基础加权轮询负载均衡算法
服务器·算法·nginx·负载均衡
chao18984419 小时前
矢量拟合算法在网络参数有理式拟合中的应用
开发语言·算法
代码无bug抓狂人19 小时前
动态规划(附带入门例题)
c语言·算法·动态规划
weixin_4454023019 小时前
C++中的命令模式变体
开发语言·c++·算法