Menu
CoddyTech

Merge k Sorted Lists

lists의 행으로 정수 목록 k개가 주어집니다. 각 행은 비내림차순으로 정렬되어 있고, 행마다 길이가 다를 수 있으며, 비어 있는 행은 없습니다.

모든 행의 모든 값을 포함하고 비내림차순으로 정렬된 하나의 목록으로 병합한 다음 반환하세요. 한 행 또는 여러 행에서 여러 번 나타나는 값은 결과에도 그 횟수만큼 나타납니다.

함수

mergeKLists(lists: integer-2d-array) → integer-array
listsinteger-2d-array
길이가 서로 다를 수도 있는 정렬된 목록들(행마다 하나씩)
반환값integer-array
모든 행의 모든 값을 하나의 정렬된 목록으로

제약 조건

  • 1 ≤ lists.length ≤ 104
  • 1 ≤ lists[i].length이고, 모든 행을 합쳐 최대 104개의 값을 가집니다.
  • -104 ≤ lists[i][j] ≤ 104
  • 모든 행은 비내림차순으로 정렬되어 있습니다.

예제

입력
lists = [[2, 6, 9], [1, 4, 10], [3, 5]]
출력
[1, 2, 3, 4, 5, 6, 9, 10]
설명
행은 2, 1, 3으로 시작하므로 1이 먼저 옵니다. 그런 다음 각 행의 맨 앞 요소는 2, 4, 3이므로 2가 그다음에 오고, 이런 식으로 계속됩니다. 세 번째 행은 5 다음에 끝나므로 6, 9, 10이 남습니다.
challenge icon

후속 질문

각 행의 값을 하나씩 포함하는 가장 작은 범위 [a, b]를 찾으세요. 각 행의 첫 번째 값으로 구성한 힙과 가장 큰 첫 번째 값으로 이를 O(N log k)에 해결할 수 있을까요?

코드 초기화
def mergeKLists(lists):
    # 여기에 코드를 작성하세요

테스트 #1

테스트 #2

테스트 #3

인자

lists = [[2, 6, 9], [1, 4, 10], [3, 5]]

예상 출력

[1, 2, 3, 4, 5, 6, 9, 10]