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

旋转数组的最小数字

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

1.使用二分查找

具体做法:

  • step 1:双指针指向旋转后数组的首尾,作为区间端点。
  • step 2:若是区间中点值大于区间右界值,则最小的数字一定在中点右边。
  • step 3:若是区间中点值等于区间右界值,则是不容易分辨最小数字在哪半个区间,比如[1,1,1,0,1],应该逐个缩减右界。
  • step 4:若是区间中点值小于区间右界值,则最小的数字一定在中点左边。
  • step 5:通过调整区间最后即可锁定最小值所在。
class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        int left = 0;
        int right = rotateArray.size()-1;
        while(left < right)
        {
            int mid = (left + right)/2;
            //若是区间中点值大于区间右界值,则最小的数字一定在中点右边
            if(rotateArray[mid] > rotateArray[right])
                left = mid + 1;
            //若是区间中点值小于区间右界值,则最小的数字一定在中点左边
            else if(rotateArray[mid] < rotateArray[right])
                right = mid;
            //若是区间中点值等于区间右界值,则不容易分辨最小数字在哪半个区间,比如[1,1,1,0,1],应该逐个缩减右界
            else
                right--;  
        }
        return rotateArray[left];
    }
};

全部评论

相关推荐

代码不跑我跑_秋招版:北大杀完9✌杀,9✌杀完鼠鼠杀
你最希望上岸的公司是?
点赞 评论 收藏
分享
用微笑面对困难:这里面最强的是驾驶证了,可以入职美团大厂,然后直接开启黄马褂人生
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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