0
点赞
收藏
分享

微信扫一扫

LeetCode题解(1439):有序矩阵中的第k个最小数组和(Python)


题目:​​原题链接​​(困难)

标签:堆

解法

时间复杂度

空间复杂度

执行用时

Ans 1 (Python)

O ( K l o g ( N K ) )

O ( N × K )

128ms (93.80%)

Ans 2 (Python)

Ans 3 (Python)

解法一:

class Solution:
def kthSmallest(self, mat: List[List[int]], k: int) -> int:
# k不大于200,但是所有可能的组合有m^n种,所以用堆可能更合适
size1, size2 = len(mat), len(mat[0])

heap = []
visited = {(0,) * size1}
heapq.heappush(heap, (sum(m[0] for m in mat), (0,) * size1))

for _ in range(k - 1):
val, lst = heapq.heappop(heap)
for k in range(size1):
if lst[k] + 1 < size2:
new_lst = lst[:k] + (lst[k] + 1,) + lst[k + 1:]
if new_lst not in visited:
visited.add(new_lst)
heapq.heappush(heap, (val + mat[k][lst[k] + 1] - mat[k][lst[k]], tuple(new_lst)))

return heapq.heappop(heap)[0]



举报

相关推荐

0 条评论