LeetCode153寻找旋转排序数组中的最小值

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhdl11/article/details/85279420

题目描述

假设按照升序排序的数组在预先未知的某个点上进行了旋转。

( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。

请找出其中最小的元素。

你可以假设数组中不存在重复元素。

示例 1:

输入: [3,4,5,1,2]
输出: 1

示例 2:

输入: [4,5,6,7,0,1,2]
输出: 0

解题思路

这题的核心解题思路就是使用二分查找。

  1. 当得到一个输入数组时,首先比较其首字符与尾字符大小,当首大于尾的话,传入这个数组的最小值就是首字符的值。
  2. 如果第一步中,首大于尾,则最小值可能在数组中间,使用二分查找,分别查找数组的两部分。
  3. 返回这段数组的最小值

代码实现

核心代码实现:GitHub地址

def find(nums, init):
    result = init
    if nums[0] <= nums[-1]:
        if nums[0] <= result:
            result = nums[0]
    else:
        result = min(find(nums[0:len(nums) // 2], result), find(nums[len(nums) // 2:], result), result)

    return result

class Solution(object):

    def findMin(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        return find(nums, 999999999)

猜你喜欢

转载自blog.csdn.net/zhdl11/article/details/85279420