"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     }

  二分查找并不是数组有序时才能使用,只要你能确定二分两侧的某一侧肯定存在你要找的内容,就可以使用二分查找

 

来源:左程云老师《程序员代码面试指南》

转载于:https://www.cnblogs.com/latup/p/11018817.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值