leetcode153_尋找旋轉排序數組中的最小值_二分查找

1. 這題雖然不是完全有序,但是部分有序,可以試試二分查找方法,並且使用的是數組這樣的存儲形式,根據下標隨機訪問,適合二分.

class Solution {
public:
    int findMin(vector<int>& nums) {
        //邊界情況.
        if(nums.size()==1) return nums[0];
        int start=0, end=nums.size()-1;
        while(start<=end) {
            int mid = start + (end-start)/2;
            //mid值大於end值,說明最小值在右邊.
            if(nums[mid]>nums[end]) start = mid+1;
            else {
                //如果mid爲數組第1個值或前一個值大於mid值,說明就爲第一個最小值,
                //直接返回.
                if(mid==0 || nums[mid-1]>nums[mid]) return nums[mid];
                //否則最小值還在左邊.
                else end = mid-1;
            }
        }
        //找不到return -1.
        return -1;
    }
};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章