旋转数组的最小数字
Last updated
Last updated
问题简述
思路:二分
查找区间 [l, r]
,初始化 l=0, r=len(arr)-1
;
则中点 m = (l+r) // 2
,有 l <= m < r
;
因此每次比较 arr[m]
和 arr[r]
;
如果 arr[m] < arr[r]
,说明答案不在 [m+1,r]
,置 r = m
;
如果 arr[m] > arr[r]
,说明答案不在 [l,m]
,置 l = m + 1
;
如果 arr[m] == arr[r]
,只能说明答案一定在 [l,r-1]
,置 r -= 1
;(因为 m != r
,所以可以这样写)
如果每次比较的是
arr[m]
和arr[l]
,碰到arr[m] == arr[l]
,就不能这样写,因为有可能m == l
;