已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:
若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]
若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]
注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]] 。
给你一个元素值 互不相同 的数组 nums ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 最小元素 (来源:LeetCode)
首先对于一个旋转的数组而言它只会出现三种情况,下面用[1,2,3,4,5,6,7,8]举例子
第一种:就是旋转多次后顺序没有变还是[1,2,3,4,5,6,7,8]
这种情况下最小值肯定是arr[0]
因为旋转的点是随机的所以会出现旋转点在中点前方和后方的情况,这样又会出现两种情况
第二种:旋转点在中点前方 [4,5,6,7,8,1,2,3]
第三种:旋转点在中点后方 [7,8,1,2,3,4,5,6],
,因为旋转的原因在旋转点之前是数字全都大于后面的数字,所以我们要找的最小值只可能在后半段,只要能找到旋转点就可确定最小值,那么目的就明确了。
首先通过left、mid和right的关系判断mid的落点在哪里,上面说过左边一直大于右边ÿ