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

2020-12-13 01:55

阅读:592

标签:pre   定义   coding   --   存在   函数   ide   cal   ||   

题目

  定义局部最小的概念: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     }

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

 

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

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

标签:pre   定义   coding   --   存在   函数   ide   cal   ||   

原文地址:https://www.cnblogs.com/latup/p/11018817.html


评论


亲,登录后才可以留言!