标签:pre 定义 coding -- 存在 函数 ide cal ||
【题目】
定义局部最小的概念:arr长度为1时,arr[0]是局部最小;arr的长度为N(N > 1)时,如果arr[0] < arr[1],那么arr[0]是局部最小,如果arr[N - 1] < arr[N - 2],那么arr[N - 1]是局部最小;如果0<i<N-1,既有arr[i] < arr[i-1], 又有arr[i] < arr[i+1],那么arr[i]是局部最小
给定无序数组arr,已知arr中任意两个相邻的数都不相等。写一个函数,只需返回arr中任意一个局部最小出现的位置即可
1 public int getLocalMinIndex(int[] arr) 2 { 3 if(arr == null || arr.length == 0) 4 { 5 return -1; 6 } 7 if(arr.length == 1 || arr[0] < arr[1]) 8 { 9 return 0; 10 } 11 if(arr[arr.length - 1] < arr[arr.length - 2]) 12 { 13 return arr.length - 1; 14 } 15 int left = 1; 16 int right = arr.length - 2; 17 while(left < right) 18 { 19 int mid = (left + right) / 2; 20 if(arr[mid] > arr[mid - 1]) 21 { 22 right = mid - 1; 23 } 24 else if(arr[mid] > arr[mid + 1]) 25 { 26 left = mid + 1; 27 } 28 else 29 { 30 return mid; 31 } 32 } 33 return left; 34 }
二分查找并不是数组有序时才能使用,只要你能确定二分两侧的某一侧肯定存在你要找的内容,就可以使用二分查找
来源:左程云老师《程序员代码面试指南》
"Coding Interview Guide" -- 在数组中找到一个局部最小的位置
标签:pre 定义 coding -- 存在 函数 ide cal ||
原文地址:https://www.cnblogs.com/latup/p/11018817.html