题目说明
解题思路
这种题目的要求时间复杂度,我们首先想到的就是二分查找,因为题目中已经给我们暗示了。那么之前我们接触过二分查找是一个有序的数组啊,现在不是一个有序的数组,而是不知道从哪个位置之后就不再有序了,那么我们可以考虑这样一个问题,如果我们按照原来的思路来做的话会有什么样的结果。首先我们肯定会把文件分为两段,其中一段必定有序,那么我们就可以针对有序的数组进行left和right的更新,以此类推,最终就会找到我们想要找到的下标。
代码如下
class Solution:
def search(self, nums: List[int], target: int) -> int:
#使用二分法进行做题,不管怎么区分,左右两端必定有一端的值是有序的值。
left,right=0,len(nums)-1
while left<=right:
m=int((left+right+1)/2)
if nums[m]==target:
return m
if nums[m]>=nums[left]:
if nums[left]<=target<nums[m]:
right=m-1
else:
left=m+1
else:
if nums[m]<target<=nums[right]:
left=m+1
else:
right=m-1
return -1