直接將所有的元素合成乙個列表,排序後取出第k小的元素即可。
具體**如下:
class
solution
:def
kthsmallest
(self, matrix: list[list[
int]
], k:
int)
->
int:
my_list =
for tmp in matrix:
my_list += tmp
my_list =
sorted
(my_list)
return my_list[k-
1]
利用最大堆的思想解題即可。
具體**如下:
class
max_heap
:def
__init__
(self)
: self.data =
defget_parent
(self, idx)
:return
(idx-1)
//2defpush
(self, num)
: ptr =
len(self.data)-1
parent_id = self.get_parent(ptr)
while self.data[parent_id]
< self.data[ptr]
: tmp = self.data[ptr]
self.data[ptr]
= self.data[parent_id]
self.data[parent_id]
= tmp
if parent_id ==0:
break
else
: ptr = parent_id
parent_id = self.get_parent(ptr)
defpop
(self)
: self.data =
[self.data[-1
]]+ self.data[1:
-1]#has left
ptr =
0while
2*ptr +
1<
len(self.data)
:#has rightif2
*ptr +
2<
len(self.data)
:if self.data[
2*ptr +1]
> self.data[
2*ptr +2]
: max_idx =
2*ptr +
1else
: max_idx =
2*ptr +
2if self.data[max_idx]
> self.data[ptr]
: tmp = self.data[ptr]
self.data[ptr]
= self.data[max_idx]
self.data[max_idx]
= tmp
ptr = max_idx
else
:break
else
:if self.data[
2*ptr +1]
> self.data[ptr]
: tmp = self.data[ptr]
self.data[ptr]
= self.data[
2*ptr +1]
self.data[
2*ptr +1]
= tmp
ptr =
2*ptr +
1else
:break
class
solution
:def
kthsmallest
(self, matrix, k)
: my_list = max_heap(
)for sample_list in matrix:
for num in sample_list:
iflen
(my_list.data)
< k:
my_list.push(num)
else
:if num < my_list.data[0]
: my_list.pop(
) my_list.push(num)
return my_list.data[
0]
LeetCode 有序矩陣中第K小的元素
給定乙個 n x n 矩陣,其中每行和每列元素均按公升序排序,找到矩陣中第k小的元素。請注意,它是排序後的第k小元素,而不是第k個元素。示例 matrix 1,5,9 10,11,13 12,13,15 k 8,返回 13。public boolean guess int matrix,int mi...
leetcode 378 有序矩陣中第K小的元素
給定乙個 n x n 矩陣,其中每行和每列元素均按公升序排序,找到矩陣中第k小的元素。請注意,它是排序後的第k小元素,而不是第k個元素。示例 matrix 1,5,9 10,11,13 12,13,15 k 8,返回 13。說明 你可以假設 k 的值永遠是有效的,1 k n2 class solut...
leetcode 378 有序矩陣中第K小的元素
給定乙個 n x n 矩陣,其中每行和每列元素均按公升序排序,找到矩陣中第k小的元素。請注意,它是排序後的第k小元素,而不是第k個元素。示例 matrix 1,5,9 10,11,13 12,13,15 k 8,返回 13。說明 你可以假設 k 的值永遠是有效的,1 k n2 解題方法 使用優先佇列...