【二分法】寻找峰值


求解代码

因为本题假设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;
    }

注意⚠️:

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

相关推荐
Wang's Blog7 小时前
Java框架快速入门: Spring Security+OAuth2之字段验证与自定义验证注解实战
java·算法·spring
带多刺的玫瑰7 小时前
Leecode#29刷题之两数相除
java·python·算法
smj2302_796826527 小时前
解决leetcode第4017题数组中的峰值II
python·算法·leetcode
午彦琳7 小时前
2026.9.9
数据结构·算法·leetcode
luj_17687 小时前
中锋卡位与开放线博弈
c语言·开发语言·网络·经验分享·算法
洋不写bug7 小时前
二叉树(四)经典算法题目解析,公共祖先,二叉树构造,非递归遍历
数据库·算法·二叉树·二叉树构造·公共祖先
hansang_IR7 小时前
【题解】P4454 [CQOI2018] 破解D-H协议
c++·算法·密码学·数论
梓䈑7 小时前
【动态规划系列】路径问题、子数组 和 子序列问题、背包问题
c++·算法·动态规划
aqiu1111117 小时前
【数位 DP / 记忆化搜索】蓝桥云课 - 光轨区的 AI 数 题解
c++·算法·蓝桥杯·数位dp
地平线开发者8 小时前
Horizon J6m 部署 YOLOv8s INT8 精度下降问题排查记录
算法