局部最小值问题:
无序数组,任意两个相邻的数不等,找到存在局部最小的位置
0位置比1位置小,则0位置是局部最小,n-2位置比n-1位置小,返回n-1位置
中间位置i,需满足 i 比左边小也比右边小,则i位置是局部最小
局部最小位置存在即可返回,不用返回所有的位置
思路:
先单独看0位置和n-1位置,如果两边都不是局部最小,那如果将数组每个数在坐标轴上连线,那一定存在局部最小位置,从中间分开,如果中间位置不是局部最小,那不管是那一半,也存在局部最小,像这种构建类似排他性的东西,就能二分,所以采用二分法如下:
public static int getLessIndex(int[] arr) {
if (arr == null || arr.length == 0) {
return -1;
}
if (arr.length == 1 || arr[0] < arr[1]) {
return 0;
}
if (arr[arr.length - 1] < arr[arr.length - 2]) {
return arr.length - 1;