算法二分查找:旋转数组的最小数字

Posted 计算机经

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法二分查找:旋转数组的最小数字相关的知识,希望对你有一定的参考价值。

题目来源:剑指Offer

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。


限定条件:

  1. 旋转数组的定义;

  2. 旋转数组为非减排序;

  3. 输出为最小元素。


注意事项:

  1. 输入空值的处理;

  2. 运用非减排序的特征,巧用二分查找法;

  3. 运用二分查找时,注意中位值的比较与标位的变换。


解题思路:

寻找有序数组的最小数或最大数,可以使用类似的解法,区别在于如何处理数值比较与输出哪个数值。此处为寻找最小数,且数组为非减排序,所以选择中值与右值比较,输出左值(左值为最小的数值)。


需要注意的是中值与右值情况的比较,分成三类:

  • 如果中值<右值,则右标为中标;

  • 如果中值>右值,则左标为中标+1

  • 如果中值=右值,则右标为左移一位。


代码实现:

C++实现如下,注意空值的处理。


以上是关于算法二分查找:旋转数组的最小数字的主要内容,如果未能解决你的问题,请参考以下文章

剑指 Offer 11. 旋转数组的最小数字暴力二分查找

旋转数组中的最小数字,剑指offer,P70 二分查找来实现O(logn)的查找

二分查找算法算法指导 意境级讲解

剑指 Offer 11. 旋转数组的最小数字-二分查找

剑指 Offer 11. 旋转数组的最小数字-二分查找

二分查找团灭力扣旋转排序数组系列