题目描述
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
- 地址:牛客链接
解决方法
- 初看这道题,一次遍历找到最小值即可,O(N);当然,如果你对面试官说出这个答案,那么可以直接回家了,是面试官傻还是你傻。
- 那么比O(N)更低的时间复杂度,则是O(log N),一看到这个时间复杂度,自然而然想到二分。但是由于这是个旋转数组,并且可能存在重复元素,所以,应该采用二分的变形。
- 首先观察旋转数组的特点,例如对于 1,2,3,4,5而言,旋转数组有 [5, 1,2,3,4], [4,5, 1,2,3], [3,4,5, 1,2], [2,3,4,5, 1], [1,2,3,4,5],除了最后一个完全旋转成原样的之外,其他旋转数组有以下三个特点
- 由两个非递减数组构成
- 前面数组中的任意一个元素都大于等于(如果原数组