leetcode 153、154. 寻找旋转排序数组中的最小值【二分查找:利用有序的一半缩小范围】

思路和leetcode 33. 搜索旋转排序数组
一样

class Solution {
public:
    int findMin(vector<int>& a) {
        int n = a.size();
        int l =0;
        int r = n-1;
        int ret = INT_MAX;
        while(l<=r){
            int m = (l+r)>>1;
            if( a[l] <= a[m] ){
                ret = min(ret,a[l]);
                l = m+1;
            }else if(a[m]<=a[r]){
                ret = min(ret,a[m]);
                r = m-1;
            }
        }
        return ret;
    }
};

在这里插入图片描述

有重复元素就需要额外考虑
如果数组最后一个元素和第一个元素一样的话,就把后面的删掉

class Solution {
public:
    int findMin(vector<int>& a) {
        int n = a.size();
        int l =0;
        int r = n-1;

        int ret = INT_MAX;
        //如果数组最后一个元素和第一个元素一样的话,就把后面的删掉
        while(r>=0 && a[r]>=a[l]){
            ret = min(ret,a[r]);
            --r;
        }
        
        while(l<=r){
            int m = (l+r)>>1;
            if( a[l] <= a[m] ){
                ret = min(ret,a[l]);
                l = m+1;
            }else if(a[m]<=a[r]){
                ret = min(ret,a[m]);
                r = m-1;
            }
        }
        return ret;
    }
};

在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页