寻找旋转排序数组中的最小值——I
题目链接
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DJE729nA-1691849612603)(C:\Users\HUASHUO\AppData\Roaming\Typora\typora-user-images\image-20230812212433885.png)]](https://img-blog.csdnimg.cn/2d108d6c6eb940f3a51f788152ed7ab1.png)
思路
首先我们以数组[1,2,3,4,5,6,7]举个例子,经过旋转后它无非就这两种情况:
情况一:旋转过后数组变成两段有序数列:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T0xFO4EO-1691849612604)(C:\Users\HUASHUO\AppData\Roaming\Typora\typora-user-images\image-20230812214608839.png)]](https://img-blog.csdnimg.cn/81996fc2d0934ed28d863ba6e530c985.png)
情况二:旋转过后数组不变,仍然有序:

而这两种情况都有一个共性:
以数组**最右边的值
val**为研究对象,最小值1右边的所有数必定小于val;最小值左边的数必定大于val
我们可以画出如下的折线图来总结:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Rc8KcUx-1691849612604)(C:\Users\HUASHUO\AppData\Roaming\Typora\typora-user-images\image-20230812220235167.png)]](https://img-blog.csdnimg.cn/857a2bf23e3c40c796cc52982a41c3cf.png)
知道了这些后,我们就可以利用二分法求解了:
- 我们设左边界为left,右边界为right,左右边界的中间值为mid
- 由上面的分析可以知道,若nums[mid] > nums[right],就说明最小值一定在中间值的右侧,中间值左侧的区域直接舍弃即可:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BqDwQvNv-1691849612604)(C:\Users\HUASHUO\AppData\Roaming\Typora\typora-user-images\image-20230812220508295.png)]](https://img-blog.csdnimg.cn/d4c2bca46bf74a938f79b13ac45dc706.png)
- 若nums[mid] < nums[right],就说明最小值一定在中间值的左侧或者就是中间值,中间值右侧的区域直接舍弃即可:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P8eu1wOe-1691849612604)(C:\Users\HUASHUO\AppData\Roaming\Typora\typora-user-images\image-20230812220756078.png)]](https://img-blog.csdnimg.cn/82eab52c678f4096882ee468f0de29c9.png)
- 随着区间的不断缩小,left和right最终就会相等,其最后停留的位置也就是数组的最小值
实现代码
int findMin(int* nums, int numsSize) {
    int left = 0;
    int right = numsSize - 1;
    while (left < right)
    {
        int mid = (right - left) / 2 + left;
        //如果中间值大于最右边的值,那么最小值一定在中间值的右边
        if (nums[mid] > nums[right])
            left = mid + 1;
        //否则,最小值就在最右边的值的左边,也可能就是这个中间值
        else
            right = mid;
    }
    //循环结束时,left和right所在的位置就是最小值的位置
    return nums[left];
}














![[SpringBoot3]基础篇](https://img-blog.csdnimg.cn/d52644192ea446c09d3300a2b4d58676.png)




