二分查找 单峰数组中的最大值 O(log n)
#include <iostream>
using namespace std;
//单峰数组最大值算法
//要求 O(log n)
//使用二分查找法
int BinarySearch(int *a,int left ,int right){
int mid = (left+right)/2;
//下面2条语句是为了防止数组越界
if(mid == left && a[mid]>a[mid+1]) return mid;
else if(mid == right && a[mid]>a[mid-1]) return mid;
else if(a[mid]>a[mid-1] && a[mid]>a[mid+1]) return mid;
// 顶峰在右边,去右边找
else if(a[mid]<a[mid+1]) BinarySearch(a,mid+1,right);
// 顶峰在左边,去左边找
else if(a[mid]<a[mid-1]) BinarySearch(a,left,mid-1);
}
int main (){
int n;
int a[10000];
int mid;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
mid=BinarySearch(a,0,n-1);
cout<<a[mid]<<endl;
return 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步