作者:手机用户2502907451 | 来源:互联网 | 2023-10-13 09:05
【题目】定义局部最小的概念:arr长度为1时,arr[0]是局部最小;arr的长度为N(N>1)时,如果arr[0]<arr[1],那么arr[0]是局部最小,如果arr[
【题目】
定义局部最小的概念:arr长度为1时,arr[0]是局部最小;arr的长度为N(N > 1)时,如果arr[0]
给定无序数组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] ])
8 {
9 return 0;
10 }
11 if(arr[arr.length - 1] ])
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 }
二分查找并不是数组有序时才能使用,只要你能确定二分两侧的某一侧肯定存在你要找的内容,就可以使用二分查找
来源:左程云老师《程序员代码面试指南》