题目描述
剑指 Offer 11. 旋转数组的最小数字
https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/
改进版:33. 搜索旋转排序数组
https://leetcode-cn.com/problems/search-in-rotated-sorted-array/
思路题解
剑指 Offer 11. 旋转数组的最小数字
其实可以直接求min,但是本题目的重点在于利用旋转数组的特性来降低时间复杂度。
大佬的题解: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/
class Solution:
def minArray(self, numbers: List[int]) -> int:
#这道题考的怎么利用部分有序将时间复杂度降下来
#i m j
#222220012
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: return min(numbers[i:j])
return numbers[i]
33. 搜索旋转排序数组
class Solution:
def search(self, nums: List[int], target: int) -> int:
i,j=0,len(nums)-1
while i<=j:
m=(i+j)//2
if nums[m]>nums[j]:
if nums[j]==target:return j
elif nums[j]>target:i=m+1
else:j-=1
else:
if nums[j]==target:return j
elif nums[j]>target:j-=1
else:j=m-1
return -1