题目:已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,4,4,5,6,7] 在变化后可能得到:
若旋转 4 次,则可以得到 [4,5,6,7,0,1,4]
若旋转 7 次,则可以得到 [0,1,4,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]] 。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
这个题目可以同153题做法类似。
使用双指针对两边的左右两端的数做判断:
1.当左边的数大于等于右边:
则left += 1
2.当右边数小于左边:
则right += 1
3.直到left和right左右指针出现相等的情况结束,返回结果。
class Solution:
def findMin(self, nums):
left = 0
right = len(nums)-1
while left <= right:
if left == right:
return nums[left]
elif nums[left] >= nums[right]:
left += 1
else:
right -= 1
注:其实本题与153题中个元素不相等的处理方式类似,但是由于是没有重复元素,故选择的方式是不需要考虑相等的情形即可