题目阐释:
给定一组升序数组,取某个点之后将数组截断交换前后两个数组顺序,给定一个值,求这个值的index
重点:二分法,确定target在哪个列表中,之后不断二分法进行位置确认。
由于不是一直升序,所以需要多些条件进行范围的限定。 二分法,需要不断 mid-1或者mid+1,因为mid已经判断过,没有再出现在数组的意义。 注意边界值的确定,有 边界值相等,列表只有一个值,这些情况。注意 < <=的使用
应用:排序,快速确定某个值的位置
class Solution: def search(self, nums, target): """ :type nums: List[int] :type target: int :rtype: int """ if not nums: return -1 start,end=0,len(nums)-1 # mid=(start+end)//2+1 while True: mid=(start+end)//2 if mid>end: return -1 if nums[mid]==target: return mid if end<=start: return -1 if nums[start]<=target<=nums[mid] or nums[mid]<=target or target<=nums[mid]