題目:數組
Suppose a sorted array is rotated at some pivot unknown to you beforehand.spa
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).code
Find the minimum element.blog
You may assume no duplicate exists in the array.element
解題思路:
class
首先假設一個sorted沒有rotated的數組[1,2,3],假設咱們經過一個pivot把這個數組rotate,那麼結果可能爲:[2,3,1], [3,1,2], 能夠發現:num[low]永遠大於(或等於)num[high]。由於你以前是sorted的數組,你在一個sorted的數組找了一個pivot進行rotate,那麼好比pivot後面的值都大於pivot以前的值。因此依據這個發現,以及二分法查找。咱們能夠根據如下判斷來解題。num[mid]有兩種可能性,若是num[mid] > num[high],證實num[mid]在rotated後的那個區間內,這個區間咱們剛纔已知都大於pivot以前的值,因此最小值就在low=mid+1那個區間內。另外一種可能,num[mid] <= num[high],那麼咱們剛纔能夠看出來這種可能性說明mid~high以及是排好序的,那麼最小值在high=mid這個區間內(mid多是最小值)。依據此判斷能夠找到最小值。
im
代碼以下:sort