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

旋转数组的最小数字

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

#include <vector>
class Solution {
  public:
    int binSearch(vector<int>& nums, int start, int end) {
        // 1. 整段单调增
        if (nums[start] < nums[nums.size() - 1]) {
            return nums[start];
        } 
        // 2. 只有一个元素  
        else if (start == end) {
            return nums[start];
        }
        // 3. 目标:找比起始点和终止点都小的值
        else {
            // 中间点的值
            int mid = (start + end) / 2;
            // 最小值在中间点右侧
            if (nums[mid] > nums[start]) {
                start = mid + 1;
            }
            // 最小值在中间点左侧
            else if (nums[mid] < nums[start]) {
                end = mid;
            }
            else {
                // 关键,无法判断最小值在中间点左侧还是右侧,采取试探的办法
                start++;
                
            }
            return binSearch(nums, start, end);
        }
    }
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型vector
     * @return int整型
     */
    int minNumberInRotateArray(vector<int>& nums) {
        // write code here
        return binSearch(nums, 0, nums.size() - 1);
    }
};

在线编程练习 文章被收录于专栏

C++在线编程练习题解

全部评论

相关推荐

09-01 09:00
已编辑
四川旅游学院 运营
牛客55195891...:主要是专业不好,别的没毛病
牛客解忧铺
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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