给定一个数组a[0~n-1],前面部分是严格单调递增,后面部分是严格单调递减(所以存在最大值),求最大值和它的索引(下标)
int maxmum(int *arr,int left,int right) {
if(right-left <2) {
return arr[left]>arr[right] ? arr[left] : arr[right];
}
while(left<=right) {
int mid =(left+right)>>1;
if(arr[mid]>arr[mid-1] && arr[mid] > arr[mid+1]) {
return arr[mid];
} else if(arr[mid]>arr[mid-1] && arr[mid] <arr[mid+1]) {
left = mid+1;
}else{
right = mid -1;
}
}
return arr[left];
int maxmum(int *arr,int left,int right) {
if(right-left <2) {
return arr[left]>arr[right] ? arr[left] : arr[right];
}
while(left<=right) {
int mid =(left+right)>>1;
if(arr[mid]>arr[mid-1] && arr[mid] > arr[mid+1]) {
return arr[mid];
} else if(arr[mid]>arr[mid-1] && arr[mid] <arr[mid+1]) {
left = mid+1;
}else{
right = mid -1;
}
}
return arr[left];
}
参:http://www.cnblogs.com/microsoftmvp/archive/2012/11/17/2774764.html