题解 | #旋转数组的最小数字# 二分法

旋转数组的最小数字

https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba

// leetcode里似乎见过这个
// 和BM19 寻找峰值 是相通的
class Solution {
public:

    // 
    int minNumberInRotateArray(vector<int> rotateArray) {

        int n = rotateArray.size();

        int left = 0, right = n-1;

        while(left<right)
        {
            int mid = (right+left)/2;
            
            if(rotateArray[mid]>rotateArray[right]) // 都跟最右侧指针的值比较 
            {
                left = mid+1; // mid 位于前面 最小值一定在右侧
            }
            else if (rotateArray[mid]<rotateArray[right])
            {
                right = mid; // 最小值可能是它 也可能左侧
            }
            else // 注意 相邻两个元素可能是相等的
            {
                // [mid] == [n-1]
                right--; // 两者都有可能

            }
        }

        return rotateArray[right];

        
    }
};

全部评论

相关推荐

06-19 13:40
武汉大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务