leetcode-寻找旋转数组的最小值-153
2021-05-13 12:28
                         标签:就是   pre   lse   不可   没有   上进   python   查找   二分法    假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的元素。 你可以假设数组中不存在重复元素。 示例 1: 输入: [3,4,5,1,2] 输入: [4,5,6,7,0,1,2] ?	主要思想是二分查找,但是数据旋转的话不是升序或者降序,所以普通的二分法不可以,需要进化,寻找一个变化点(旋转点):中间某一个元素大于第一个元素,那就说明变化点在右边,否则在左 leetcode-寻找旋转数组的最小值-153 标签:就是   pre   lse   不可   没有   上进   python   查找   二分法    原文地址:https://www.cnblogs.com/hornets/p/13129914.html
输出: 1
示例 2:
输出: 0解题思路:
def find_min(nums):
    if len(nums) == 1:
        return nums[0]
    left = 0
    right = len(nums) -1
    if nums[right] > nums[0]:
        "如果最后一个元素大于第一个元素,就说明没有旋转"
        return nums[0]
    while right >= left:
        mid = left + (right - left) // 2
        """
            mid:中间值
                大于下一个值就说明下一个值就是最小值
                前一个值大于这个中间值,说明这个中间值就是变化点
        """
        if nums[mid] > nums[mid + 1]:
            return nums[mid + 1]
        if nums[mid - 1] > nums[mid]:
            return nums[mid]
        """
            中间值大于第一个值,说明最小值在mid右边,通过这个中间值找出变化点(旋转点)
            否则在左边
        """
        if nums[mid] > nums[0]:
            left = mid + 1
        else:
            right = mid - 1
文章标题:leetcode-寻找旋转数组的最小值-153
文章链接:http://soscw.com/index.php/essay/85135.html