"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)?