一个分治算法的小程序

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:38   3731   0

int getTop(int* a,int l,int r)
{
int middle=(l+r)/2;
int left=l,right=r;
while(!(*(a+middle)>*(a+middle-1)&&*(a+middle)>*(a+middle+1)) )
{
if(*(a+middle)>*(a+middle-1)&&*(a+middle)<*(a+middle+1))
left=middle;
else
right=middle;
middle=(left+right)/2;
}
return *(a+middle);
}

问题如下,有一个数组,有一个最大值,最大值左边按递增排列,右边按递减排列,问怎么找出最大值。

解决方法取中间值,判断是否满足条件,若不满足,如在递增方,就在右边重复循环,如果在递减方就在左边重复

时间复杂度为O(LOGN)

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP