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;
    }
};

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