把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。
二分查找的思想。约束条件是中间值与右边值的大小关系,大于则最小元素位于右半区内low = mid + 1
,而小于则最小元素位于左半区内,这里要包含中间值high = mid
,等于的情况说明数组中有相同数字high -= 1
。
class Solution:
def min_number_in_rotate_array(self, array):
if not array:
return False
if len(array) == 1:
return array[0]
low, high = 0, len(array)-1
while low <= high:
mid = (low+high) >> 1
# print(low, high, mid)
if array[mid] > array[high]:
low = mid + 1
elif array[mid] < array[high]:
high = mid
else:
high -= 1
return array[low]
st = Solution()
seq = [8, 9, 19, 3, 7]
print(st.min_number_in_rotate_array(seq))
(最近更新:2019年09月21日)