Find Minimum in Rotated Sorted Array -- LeetCode
阿新 • • 發佈:2017-05-25
arc ria ref ava 變量 data- nim == tracking
這道題是Search in Rotated Sorted Array的擴展,差別就是如今不是找一個目標值了,而是在bst中找最小的元素。主要思路還是跟Search in Rotated Sorted Array差點兒相同。還是通過左邊界和中間的大小關系來得到左邊或者右邊有序的信息。假設左半邊有序。那麽左半邊最小就是左邊第一個元素,能夠和當前最小相比取小的,然後走向右半邊。否則,那麽就是右半半邊第一個元素,然後走向左半邊。這樣子每次能夠截掉一半元素,所以最後復雜度等價於一個二分查找。是O(logn),空間上僅僅有四個變量維護二分和結果,所以是O(1)。代碼例如以下: 有朋友可能註意到上面的實現還有第三種情況,就是左邊界和中間是相等的情況。這道題目事實上是不用發生的,由於元素沒有反復。而Find Minimum in Rotated Sorted Array II這道題這考慮了元素反復的情況,這裏僅僅是為了算法更加一般性。就把那個情況也包括進來,有興趣的朋友能夠看看Find Minimum in Rotated Sorted Array II對反復元素的分析哈。
public int findMin(int[] num) { if(num == null || num.length==0) return 0; int l = 0; int r = num.length-1; int min = num[0]; while(l<r-1) { int m = (l+r)/2; if(num[l]<num[m]) { min = Math.min(num[l],min); l = m+1; } else if(num[l]>num[m]) { min = Math.min(num[m],min); r = m-1; } else { l++; } } min = Math.min(num[r],min); min = Math.min(num[l],min); return min; }
Find Minimum in Rotated Sorted Array -- LeetCode