public class LocalLessValue { // 要求在一个(无序的)(且元素互不相同)的数组中找到局部最小值 // 局部最小值定义: // 第一种情况: // 直接判断数组最右侧的位置上的数是否比倒数第二个位置的数小 // 第二种情况: // 直接判断数组0位置的数是否比1位置上的数小 // 第三种情况: // 这个数比相邻两个数都小 public static void main(String[] args) { //先来一个满足要求的数组 int[] arr = {1,11,10,9,4,2}; if(arr[0] < arr[1]) { System.out.println("其中一个局部最小值是"+arr[0]); } else if(arr[arr.length-1] < arr[arr.length-2]) { System.out.println("其中一个局部最小值是"+arr[arr.length-1]); } else { //用二分法找到一个局部最小值 int index = localLessMethod(arr); if(index != -1) { System.out.println("其中一个局部最小值是"+arr[index]); } else { System.out.println("没有局部最小值"); } } } public static int localLessMethod(int[] arr) { int left = 0; int right = arr.length-1; int index = -1; while(left <= right) { int mid = left + ( (right-left) >> 1 ); if(mid > 0 && mid < arr.length-1 && arr[mid] < arr[mid-1] && arr[mid] < arr[mid+1]) { index = mid; break; } else if(mid > 0 && arr[mid] > arr[mid-1]){ right = mid -1; } else if( mid < arr.length-1 && arr[mid] > arr[mid+1]) { left = mid+1; } } return index; } }