leetcode 有序矩陣中第K小的元素

2021-09-25 07:35:20 字數 2461 閱讀 1531

直接將所有的元素合成乙個列表,排序後取出第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 解題方法 使用優先佇列...