컴퓨터 시각 에 집중 하 는 AndyJ 의 어머니 를 따라 알고리즘 을 배 운 매일 한 문제 leetcode 33 검색 회전 정렬 배열

5027 단어
이 문제 의 교훈 은 모든 상황 을 다 써 야 한 다 는 것 이다!else 를 함부로 쓰 지 마 세 요. 너무 위험 해 요...국경 상황 을 고려 해 야 한다.또 다른 교훈.왼쪽 닫 기 오른쪽 닫 기 규칙 을 기억 하 세 요. while 는 같은 규칙, mid + 1 - 1 규칙 보다 작 습 니 다.이 세 가지.명심 하 다.그리고 순환 중 에 else 를 함부로 쓰 지 말고 진지 하 게 생각 하고 문 제 를 많이 푸 세 요. 네, 많 지 않 아 요.
33.         
                          。

(   ,   [0,1,2,4,5,6,7]      [4,5,6,7,0,1,2] )。

          ,            ,       ,     -1 。

                。

             O(log n)   。

코드 직접 쓰기: 더 블 포인터, 이 링크 의 그림 이 참 좋 습 니 다. 참조: 링크: 2 분 찾기. 자, 이것 도 알 아 볼 거 라 고 믿 습 니 다.우리 가 판단 하 는 것 은 영원히, 혹은 필요 한 것 은 영원히, 그 단조 로 운 구간, 다른 것 은 else 로 대체 하 는 것 이다.그게 중요 해.python 코드 는 다음 과 같 습 니 다:
class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        l = 0
        r = len(nums)-1
        while l<=r:
            mid = l+(r-l)//2
            if nums[mid]==target:
                return mid
            if nums[l]<nums[mid]:
                if nums[l]<=target and nums[mid]>target:
                    r = mid-1
                else:
                    l = mid+1
            elif nums[l]>nums[mid]:
                if nums[r]>=target and nums[mid]<target:
                    l = mid+1
                else:
                    r = mid-1
            else:
                l = mid+1
        return -1

디 테 일이 중요 합 니 다. else 를 많이 사용 하지 마 세 요. elif 를 사용 하 는 것 이 중요 합 니 다.

좋은 웹페이지 즐겨찾기