算法二分查找:旋转数组的最小数字
Posted 计算机经
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法二分查找:旋转数组的最小数字相关的知识,希望对你有一定的参考价值。
题目来源:剑指Offer
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
限定条件:
旋转数组的定义;
旋转数组为非减排序;
输出为最小元素。
注意事项:
输入空值的处理;
运用非减排序的特征,巧用二分查找法;
运用二分查找时,注意中位值的比较与标位的变换。
解题思路:
寻找有序数组的最小数或最大数,可以使用类似的解法,区别在于如何处理数值比较与输出哪个数值。此处为寻找最小数,且数组为非减排序,所以选择中值与右值比较,输出左值(左值为最小的数值)。
需要注意的是中值与右值情况的比较,分成三类:
如果中值<右值,则右标为中标;
如果中值>右值,则左标为中标+1;
如果中值=右值,则右标为左移一位。
代码实现:
C++实现如下,注意空值的处理。
以上是关于算法二分查找:旋转数组的最小数字的主要内容,如果未能解决你的问题,请参考以下文章