问题描述:给定一个数组,数组中最大值的前面数字递增,后面连续递减,求最大值,
eg: 1,2,3,4,8,6,5,4,3 中的最大值为8
算法描述:采用二分法,获取中间值,然后和他的前面一个比,如果比前面数字大,说明最大值在后面,缩小查找范围,如果比后面一个大,说明最大值在前面,缩小查找范围;
代码如下:
public static void main(String[] args) throws Exception{ int[] array = new int[9]; array[0] = 1; array[1] = 2; array[2] = 7; array[3] = 8; array[4] = 9; array[5] = 10; array[6] = 11; array[7] = 3; array[8] = 2; sort(array); } public static void sort(int[] array){ int start = 0; int end = array.length - 1; int mid; while(start < end){ mid = (start + end)/2; //如果就剩下最后俩个数字的时候,俩个数字中有一个肯定是最大值,直接比较即可 if(start == mid || end == mid){ System.out.println(array[end] > array[start] ? array[end] : array[start]); return; } if(array[mid] > array[mid + 1]){ end = mid; } else if(array[mid] < array[mid + 1]){ start = mid; } else if(array[mid] > array[mid - 1]){ start = mid; } else if(array[mid] < array[mid-1]){ end = mid; } } System.out.println(array); }