题目:原题链接(困难)
标签:堆
解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
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]