Menu
CoddyTech

Search in Rotated Sorted Array

보통이진 탐색python iconjava iconcpp iconc iconjs icon+10

서로 다른 정수로 이루어진 목록을 오름차순으로 정렬한 다음 회전했습니다. 즉, 앞에서 원소를 몇 개(0개일 수도 있음) 가져와 같은 순서로 뒤에 옮겼습니다. 예를 들어, [2, 5, 8, 11, 15, 19, 23]을 4만큼 회전하면 [15, 19, 23, 2, 5, 8, 11]이 됩니다. 회전된 목록 nums와 정수 target이 주어집니다. target이 nums에 있으면 0부터 세는 인덱스를 반환하고, 없으면 -1을 O(log n) 시간에 반환하세요.

함수

search(nums: integer-array, target: integer) → integer
numsinteger-array
회전된 정렬된 고유 정수 목록
targetinteger
찾을 값
반환값integer
nums에서 target의 인덱스, 없으면 -1

제약 조건

  • 1 ≤ nums.length ≤ 5000
  • -104 ≤ nums[i], target ≤ 104
  • nums의 모든 값은 서로 다릅니다.
  • nums는 어떤 k만큼 회전된 오름차순 리스트이며, 0 ≤ k < nums.length입니다. k = 0이면 회전되지 않은 상태로 유지됩니다.

예제

입력
nums = [15, 19, 23, 2, 5, 8, 11]target = 5
출력
4
설명
첫 번째 중간값인 인덱스 3에는 2가 들어 있으므로, 오른쪽 절반 [2, 5, 8, 11]은 정렬되어 있고 5를 포함합니다. 다음 중간값인 인덱스 5에는 8이 들어 있습니다. 정렬된 왼쪽 부분 [5, 8]에는 5가 있으므로 인덱스 4로 이어집니다.
challenge icon

후속 질문

nums에 중복된 값이 있을 수 있다면, 어떤 알고리즘도 O(log n)을 보장할 수 없습니다. 단 하나의 0을 숨긴 1로 이루어진 회전된 리스트를 사용해 이를 증명할 수 있나요?

코드 초기화
def search(nums, target):
    # 여기에 코드를 작성하세요

테스트 #1

테스트 #2

테스트 #3

인자들

nums = [15, 19, 23, 2, 5, 8, 11]
target = 5

예상 출력

4