题目

解题

from queue import PriorityQueue


def find_kth_smallest(matrix, k):
    # 创建一个优先级队列,用于存储元素及其位置
    min_heap = PriorityQueue()

    # 将每一行的第一个元素及其位置 (值, 行, 列) 加入优先级队列
    for row in range(len(matrix)):
        min_heap.put((matrix[row][0], row, 0))

    kth_smallest = -1
    # 合并有序链表的逻辑,找到第 k 小的元素
    while not min_heap.empty() and k > 0:
        current_value, current_row, current_col = min_heap.get()
        # 更新第 k 小的元素
        kth_smallest = current_value
        k -= 1
        # 如果当前行还有更多的元素,则将下一个元素加入优先级队列
        if current_col + 1 < len(matrix[current_row]):
            next_value = matrix[current_row][current_col + 1]
            min_heap.put((next_value, current_row, current_col + 1))

    return kth_smallest


# 测试代码
matrix = [
    [1, 5, 9],
    [10, 11, 13],
    [12, 13, 15]
]
k = 8
print(f"这矩阵中第{k}小元素是: {find_kth_smallest(matrix, k)}")
08-04 11:07