LeetCode 154. 寻找旋转排序数组中的最小值 II (二分、边界条件)

寻找旋转排序数组中的最小值 II
画个图脑补一下
最坏时间复杂度: O ( n ) O(n)
在这里插入图片描述

class Solution {
public:
    int findMin(vector<int>& a) {
        int n = a.size();
        int l = 0 , r = n-1;
        while(l<r){ //l==r时就终止了,最小值就已找到了
            int m = l+(r-l)/2;
            // a[m] 和 a[r] 不在同一段
            if(a[m]>a[r]){
                l = m+1;  // 最小值必然在mid的右边
            // a[m] 和 a[r] 在同一段
            }else if(a[m]<a[r]){
                r = m;   // 这里可不能写成 r = m -1; 因为 a[m]可能已经就是最小值了 
            // 未知
            }else{
                r--;
            }
        }
        return a[l];
    }
};

猜你喜欢

转载自blog.csdn.net/qq_44846324/article/details/107503261
今日推荐