leetcode81 search in Rotate Array

沒重複數字

class Solution:
    def search(self, nums: List[int], target: int) -> bool:
        left,right=0,len(nums)-1
        while left<=right:
            
            mid=(left+right)//2
            print(nums[left],nums[right],nums[mid])
            if nums[mid]<target:
                if nums[right]>target:
                    left=mid+1
                elif nums[right]<target:
                    if nums[mid]<nums[right]:
                        right=mid-1
                    else:
                        left=mid+1
                    
                else:
                    return True
            elif nums[mid]>target:
                if nums[right]>target:
                    if nums[right]>nums[mid]:
                        right=mid-1
                    else:
                        left=mid+1
                   
                elif nums[right]<target:
                    right=mid-1
                else:
                    return True
            else:
                return True
        return False

有重複數字

class Solution:
    def search(self, nums: List[int], target: int) -> bool:
        left,right=0,len(nums)-1
        while left<=right:
            
            mid=(left+right)//2
            print(nums[left],nums[right],nums[mid])
            if nums[mid]<target:
                if nums[right]>target:
                    left=mid+1
                elif nums[right]<target:
                    if nums[mid]<nums[right]:
                        right=mid-1
                    elif nums[mid]>nums[right]:
                        left=mid+1
                    else:
                        right-=1
                else:
                    return True
            elif nums[mid]>target:
                if nums[right]>target:
                    if nums[right]>nums[mid]:
                        right=mid-1
                    elif nums[right]<nums[mid]:
                        left=mid+1
                    else:
                        right-=1
                elif nums[right]<target:
                    right=mid-1
                else:
                    return True
            else:
                return True
        return False

兩者的區別在於如果有重複數字的話,如果mid處的數字正好等於right處的數字,那麼可能在mid的左邊也可能在mid的右邊,但是right肯定不是了,right-=1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章