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

旋转数组的最小数字

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

  1. 旋转数组由一个递增数组生成,所以一边的数组的元素会大于另一边数组的任意元素。所以当mid<right时mid和right在同一数组中,或者mid是元素小的一方时,搜索左边(包含mid),反之,mid>right 时,mid和right在不同数组,且right所在的数组必然是最小数组,故搜索右边 。 如果两者相等就去掉right 继续搜索。
```class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        int left = 0, right = rotateArray.size() - 1;
        while(left < right)
        {
            int mid = (left + right) >> 1; //取中间值
            if(rotateArray[mid] > rotateArray[right])  left = mid + 1; //搜索右边
            else if(rotateArray[mid] < rotateArray[right])  right = mid; //搜索左边
            else right--; //继续搜索左边
        }
        return rotateArray[left];
    }
};
全部评论
按序排列的拦腰斩断,一头一尾肯定是相邻的两个数,自然一小一大(起码也是相等,因为非呈下降趋势)
点赞 回复 分享
发布于 2022-10-18 21:15 上海
因为他是把若干个前面的数搬到后面,数组是递增的,所以数组前面的数小于后面的
点赞 回复 分享
发布于 2022-04-19 21:09
旋转数组由一个递增数组生成,所以一边的数组的元素会大于另一边数组的任意元素.这句话为什么啊
点赞 回复 分享
发布于 2022-04-19 19:58

相关推荐

06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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