# leetcode submit region begin(Prohibit modification and deletion)from typing import *class Solution: def search(self, nums: List[int], target: int) -> int: left, right = 0, len(nums)-1 while left <= right: mid = left + (right-left) // 2 if nums[mid] == target: return mid """ 我们把数组二分后,要么左边有序,要么右边有序 因为只有有序,才能二分, 所以我们得根据有序的那个部分 确定我们该如何改变二分查找的上下界 """ # 如果旋转数组在左半部分有序 if nums[left] <= nums[mid]: # 并且目标值在左半部分里 if nums[left]<=target<nums[mid]: right = mid-1 else: left = mid + 1 # 如果旋转数组左半部分无序, # 说明旋转点在左半部分, # 那么右半部分必然有序 else: # 并且目标值在右半部分 if nums[mid]<target<=nums[right]: left = mid + 1 else: right = mid-1 return -1# leetcode submit region end(Prohibit modification and deletion)
———————————————–
如果是第一次阅读文章,可以看看下面的话。
以上内容由平时积累而成,尽量保证代码与注释合在一起,并未做过多篇幅的解释。不一定是最优解,但一定是自己能看得懂的。有疑问的地方请留言评论,我在评论中给详细解答。如果题干是原题,就没有写在文章中。后续内容会慢慢发出
欢迎大家评论,收藏和转发。
感谢大家的点赞和关注。
先赞后看,年薪百万
红帽帽,白签签,一起排队做酸酸。愿疫情早日过去。