> 文章列表 > 力扣题库刷题笔记153-寻找旋转排序数组中的最小值

力扣题库刷题笔记153-寻找旋转排序数组中的最小值

力扣题库刷题笔记153-寻找旋转排序数组中的最小值

1、题目如下:

2、个人Python实现

        看到这题的第一反应是用min办法

 

        看到评论区清一色的二分法,于是想一想有没有其他的方式,这里还真有,但是跟min起始区别不大。首先是,题目中的排序方式细看和加油站的排序方式一模一样,所以使用相同的排序方式后,如果和升序排列后的数组一样,则返回第一个元素

        再一想,这其实跟脱裤子放屁没啥区别,因为直接使用return sorted(nums)[0]或者nums.sort(),return nums[0]也行

        于是打算按照二分法来试一下:

        这里直接能通过是我没想到的,为什么与数组最后一个元素相比较再移动左右指针呢。是因为数组经过旋转后,有且只有两种方式,一是递增,例如[1,2,3,4,5],二是两段递增,例如[3,4,5,1,2],也就是说对于数组最后的元素,在他的左边一定有递增的数组。即使是[2,3,4,5,1],对于1来讲左边的[2,3,4,5]也是递增的数组。当最后的元素(右指针)和中间的元素(mid指针)相比,只有以下两种情况:

        a、当mid大于right的,说明mid和right是二段递增,最小值一定在mid和right之间,左指针使用mid+1的下标进一步缩小范围

        b、当mid小于right的,说明right和mid是一直递增,最小值一定在mid及其左边