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]
설명
전체에서 가장 작은 값은 두 번째 행의 첫 번째 값인 1입니다. 그다음 각 행은 2, 4, 3으로 시작하므로 다음은 2이고, 이런 식으로 이어집니다. 세 번째 행은 5 다음에 끝나므로, 마지막에는 6, 9, 10이 남습니다.

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

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]