题目阐释:
给定一组升序数组,取某个点之后将数组截断交换前后两个数组顺序,
给定一个值,求这个值的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)

龙仔
12 声望4 粉丝