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) |