剑指offer-旋转数组的最小数字-数组-python
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
思路
由题意所知,旋转之后,输出最小的元素,那么我们可以用min()。
在不适用min()的时候,使用二分查找。
链接:https://www.nowcoder.com/questionTerminal/9f3231a991af4f55b95579b44b7a01ba?f=discussion 来源:牛客网 # -*- coding:utf-8 -*- class Solution: def minNumberInRotateArray(self, rotateArray): # 可以使用min()函数, 但是在不适用min函数的情况下,思路应该是二分查找 # 下面使用 递归实现2分查找,其中递归的时候必须使用return!!! 不然会返回none # write code here start = 0 end = len(rotateArray) - 1 mid = int((start + end) / 2) if len(rotateArray) == 2: if rotateArray[0]>rotateArray[1]: return rotateArray[1] else: return rotateArray[0] elif rotateArray[mid] > rotateArray[end]: return self.minNumberInRotateArray(rotateArray[mid:end + 1]) elif rotateArray[mid] < rotateArray[start]: return self.minNumberInRotateArray(rotateArray[start:mid + 1])
class Solution: def minArray(self, numbers: [int]) -> int: i, j = 0, len(numbers) - 1 while i < j: m = (i + j) // 2 if numbers[m] > numbers[j]: i = m + 1 elif numbers[m] < numbers[j]: j = m else: j -= 1 return numbers[i] """作者:jyd 链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/solution/mian-shi-ti-11-xuan-zhuan-shu-zu-de-zui-xiao-shu-3/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。"""