Menu
CoddyTech

Merge k Sorted Lists

Bạn nhận được k danh sách số nguyên làm các hàng của lists. Mỗi hàng được sắp xếp theo thứ tự không giảm, các hàng có thể có độ dài khác nhau và không hàng nào rỗng.

Gộp chúng thành một danh sách chứa mọi giá trị từ tất cả các hàng, được sắp xếp theo thứ tự không giảm, rồi trả về danh sách đó. Giá trị xuất hiện nhiều lần trong một hàng hoặc nhiều hàng sẽ xuất hiện đúng số lần đó trong kết quả.

Hàm

mergeKLists(lists: integer-2d-array) → integer-array
listsinteger-2d-array
các danh sách đã sắp xếp, mỗi hàng một danh sách, có thể có độ dài khác nhau
Trả vềinteger-array
mọi giá trị từ mọi hàng, trong một danh sách đã sắp xếp

Ràng buộc

  • 1 ≤ lists.length ≤ 104
  • 1 ≤ lists[i].length, và tổng số giá trị trong tất cả các hàng không vượt quá 104
  • -104 ≤ lists[i][j] ≤ 104
  • Mỗi hàng được sắp xếp theo thứ tự không giảm.

Ví dụ

Đầu vào
lists = [[2, 6, 9], [1, 4, 10], [3, 5]]
Đầu ra
[1, 2, 3, 4, 5, 6, 9, 10]
Giải thích
Các hàng bắt đầu bằng 2, 1 và 3, nên 1 đứng đầu tiên. Tiếp theo, các phần tử đầu hàng là 2, 4 và 3, nên 2 đứng tiếp theo, cứ thế tiếp tục. Hàng thứ ba hết phần tử sau 5, còn lại 6, 9 và 10.
challenge icon

Câu hỏi mở rộng

Tìm khoảng (range) nhỏ nhất [a, b] chứa một giá trị từ mỗi hàng. Liệu một heap chứa các phần tử đầu hàng cùng với phần tử đầu hàng lớn nhất có thể làm được điều đó trong O(N log k) không?

Đặt lại code
def mergeKLists(lists):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

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

Đầu ra mong đợi

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