题目描述:有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。
要求空间复杂度为O(1),时间复杂度为O(logn)
这个题目官方给出的解法是二分法,具体怎么使用如下:
首先来分析“非降序数组”,数组既然不是降序的,那么可能有以下几种情况:
1.数组元素升序
2.数组所有元素的值相等
3.数组大体上是升序排列的,有部分元素的值是相等的
基于此可以判断出数组旋转后的特征
1.数组可以分成前后两个区域,前后区域都是递增的趋势
2.如果最小值不在两端,那么left和right之间不会出现多个不等的局部最小值
画出数组旋转后的大致的图像
接下来要讨论的就是arr[mid]和两端的值的大小关系
1.arr[mid]>arr[right]
此时最小值在mid和right区间内&#x