1. 程式人生 > >劍指offer 10. 旋轉陣列的最小數字

劍指offer 10. 旋轉陣列的最小數字

把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。
輸入一個升序的陣列的一個旋轉,輸出旋轉陣列的最小元素。
例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。
陣列可能包含重複項。
注意:陣列內所含元素非負,若陣列大小為0,請返回-1。
樣例

輸入:nums=[2,2,2,0,1]
輸出:0

要找的點p滿足這樣的條件:p點之前的點都大於nums[0],p點之後的點都小於nums[0],二分

class Solution {
public:
    int findMin(vector<int>& nums)
{ // 這個數滿足:左邊的數不小於nums[0], 右邊的數不大於nums[0] if(nums.empty()) return -1; if(nums.back() > nums[0]) return nums[0]; int l = 0, r = nums.size() - 1; while(l < r){ int mid = l + r >> 1; if(nums[mid] >= nums[0]) l = mid + 1; else
r = mid; } return nums[l]; } };