题目描述[原题链接][https://www.acwing.com/problem/content/20/]
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个升序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
数组可能包含重复项。
注意:数组内所含元素非负,若数组大小为0,请返回-1。
样例
1 | 输入:nums=[2,2,2,0,1] |
算法描述
- 特殊情况特殊处理,
长度为0
、旋转的元素为0个
,长度为0直接返回-1
,没有旋转返回nums[0]
- 去掉后面因为旋转可能与
nums[0]
相等的值,整个数组可以看作递增,可以二分
思想解题- 在满足
newNums[0]>newNums[mid]
条件下,r=mid
- 否则
l=mid+1
- 在满足
- 返回结果
newNums[r]
C++代码
1 | class Solution { |
Java代码
1 | class Solution { |