Menu
CoddyTech

Find First and Last Position of Element in Sorted Array

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

정수가 비내림차순으로 정렬된 목록 nums와 정수 target이 주어집니다. 따라서 값이 반복될 수 있습니다. 0부터 세는 두 인덱스의 목록, 즉 target이 나타나는 첫 번째 위치와 마지막 위치를 반환하세요. target이 목록에 없으면 [-1, -1]을 반환하세요. 시간 복잡도는 O(log n)을 목표로 하세요.

함수

searchRange(nums: integer-array, target: integer) → integer-array
numsinteger-array
값이 반복될 수 있는 정렬된 정수 목록
targetinteger
찾을 값
반환값integer-array
target의 첫 번째 인덱스와 마지막 인덱스, 또는 target이 없으면 [-1, -1]

제약 조건

  • 1 ≤ nums.length ≤ 104
  • -104 ≤ nums[i], target ≤ 104
  • nums는 비내림차순으로 정렬되어 있습니다.

예제

입력
nums = [3, 5, 5, 5, 8, 9, 9, 12]target = 5
출력
[1, 3]
설명
5의 세 복사본은 인덱스 1, 2, 3에 있으므로, 연속 구간은 1에서 시작해 3에서 끝납니다. 인덱스 0에는 3이 있고 인덱스 4에는 8이 있으므로, 연속 구간은 더 이어질 수 없습니다.
challenge icon

후속 질문

같은 리스트에 대해 서로 다른 대상을 찾는 쿼리가 수천 번 들어온다면, 미리 한 번 순회하는 것만으로 각 쿼리를 O(log n)보다 빠르게 처리할 수 있을까요?

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

테스트 #1

테스트 #2

인자들

nums = [3, 5, 5, 5, 8, 9, 9, 12]
target = 5

예상 출력

[1, 3]