题目阐释:
给定一组升序数组,取某个点之后将数组截断交换前后两个数组顺序,
给定一个值,求这个值的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]<nums[start]<=target or target<=nums[mid]<nums[start]:
end=mid-1
else:
start=mid+1
if __name__=="__main__":
st=Solution()
nums=[4,5,6,7,0,1,2]
nums=[4,5,6,7,0,1,2]
# nums=[]
nums=[1,3]
nums=[3,1]
# nums=[1]
target=1
out=st.search(nums,target)
print(out)