[LeetCode] 0033. 회전정렬 배열에서 검색

회전 정렬 배열에서 검색

Python, C++, JavaScript, SQL 및 TypeScript의 다양한 LeetCode 솔루션을 살펴보세요. 여러 프로그래밍 언어로 인터뷰 준비, 학습 및 코드 연습에 적합합니다. Github 레포 링크

중간

 


정수 배열이 있습니다 숫자 오름차순으로 정렬됨( 별개의 값).

함수에 전달되기 전에, 숫자 ~이다 회전했을 수도 있음 알 수 없는 피벗 인덱스에서 케이 (1 <= k < 숫자.길이) 결과 배열은 다음과 같습니다. [숫자[k], 숫자[k+1], ..., 숫자[n-1], 숫자[0], 숫자[1], ..., 숫자[k-1]] (0-인덱스). 예를 들어, [0,1,2,4,5,6,7] 피벗 인덱스에서 회전될 수 있음 3 그리고 된다 [4,5,6,7,0,1,2].

주어진 배열 숫자 ~ 후에 가능한 회전과 정수 목표, 반품 지수 목표 만약에 있다면 숫자, 또는 -1 그렇지 않은 경우 숫자.

다음을 사용하여 알고리즘을 작성해야 합니다. O(로그 n) 런타임 복잡성.

예시 1:

입력: 숫자 = [4,5,6,7,0,1,2], 대상 = 0
산출: 4

예 2:

입력: 숫자 = [4,5,6,7,0,1,2], 대상 = 3
산출: -1

예시 3:

입력: 숫자 = [1], 대상 = 0
산출: -1

제약:

  • 1 <= 숫자.길이 <= 5000
  • -10 4 <= 숫자[i] <= 10 4
  • 모든 값 숫자 ~이다 고유한.
  • 숫자 회전될 수 있는 오름차순 배열입니다.
  • -10 4 <= 목표 <= 10 4

파이썬

				
					import List class 입력에서 해결책: def search(self, nums: List[int], target: int) -> int: # return nums.index(target) if target in nums else -1 n = len(nums) left, right = 0, n-1 while left <= right: mid = left + (right - left) // 2 if nums[mid] > nums[-1]: left = mid + 1 else: right = mid - 1 def BinarySearch(left_boundary: int, right_boundary: int, target: int): left, right = left_boundary, right_boundary while left <= right: mid = left + (right - left) // 2 if nums[mid] == target: return mid elif nums[mid] > target: right = mid - 1 else: left = mid + 1 return -1 if (답변 := binarySearch(0, left-1, target)) != -1: 답 반환 return binarySearch( 왼쪽, n-1, 대상)
				
			
ko_KR한국어