码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-06-13 20:51:59      阅读:135      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!