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
  • < no? exact format tags, content. Avoid leading space.
  • nums는 0 ≤ k < nums.length인 어떤 k만큼 회전된 오름차순 리스트이며, k = 0이면 회전되지 않습니다.

예제

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

lock icon제출 시 숨은 테스트 +23개

challenge icon

후속 질문

nums에 중복 항목이 있을 수 있다면, 어떤 알고리즘도 O(log n)을 보장할 수 없습니다. 이를 증명할 수 있나요? 1로 이루어진 회전된 리스트에 0 하나를 숨겨 넣어, 0을 찾으려면 모든 요소를 읽어야 하는 상황을 만들어 보세요.

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

케이스 1

케이스 2

케이스 3

입력

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

기대값

4