"Coding Interview Guide" -- 在数组中找到一个局部最小的位置

Posted latup

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了"Coding Interview Guide" -- 在数组中找到一个局部最小的位置相关的知识,希望对你有一定的参考价值。

题目

  定义局部最小的概念: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" -- 在数组中找到一个局部最小的位置的主要内容,如果未能解决你的问题,请参考以下文章

"Coding Interview Guide" -- 仅用递归函数和栈操作逆序一个栈

"Coding Interview Guide" -- 判断二叉树是否为平衡二叉树

"Coding Interview Guide" -- 只用位运算不用算术运算实现整数的加减乘除运算

为啥这个例子的时间复杂度来自“Cracking the Coding Interview” O(k c^k)?

[Cracking the Coding Interview] 4.4 Check Balanced

Cracking the coding interview 智力题之-扔鸡蛋问题