力扣 378 有序矩陣中第K小的元素

2021-10-24 21:44:35 字數 1244 閱讀 7577

思路:顯然易得矩陣最小值為m[0

][0]

m[0][0]

m[0][0

],最大值為m[n

−1][

n−1]

m[n-1][n-1]

m[n−1]

[n−1

],那麼我們可以二分第k

kk小元素的值mid

midmi

d,再遍歷矩陣的每一行(或列)判斷<=m

id<=mid

<=m

id的數的總和,假設為num

numnu

m,如果num

>=k

num>=k

num>=k

說明m id

midmi

d過大,否則說明mid

midmi

d過小。

class

solution

:def

upper_bound

(self,array,k)

: l,r=0,

len(array)-1

while l<=r:

mid=

(l+r)//2

if array[mid]

>k:

r=mid-

1else

: l=mid+

1return l

defkthsmallest

(self, matrix: list[list[

int]

], k:

int)

->

int:

n=len(matrix)-1

l,r=matrix[0]

[0],matrix[n]

[n]while l<=r:

mid=

(l+r)//2

num=

0for each in matrix:

if num>=k:

break

num+=self.upper_bound(each,mid)

if num>=k:

r=mid-

1else

: l=mid+

1return l

力扣第378題 有序矩陣中第K小的元素

給定乙個 n x n 矩陣,其中每行和每列元素均按公升序排序,找到矩陣中第 k 小的元素。請注意,它是排序後的第 k 小元素,而不是第 k 個不同的元素。示例 matrix 1,5,9 10,11,13 12,13,15 k 8,返回 13。解法1 使用flat 加上sort 之後根據index進行...

C語言 力扣 378 有序矩陣中第K小的元素

給定乙個 n x n 矩陣,其中每行和每列元素均按公升序排序,找到矩陣中第 k 小的元素。請注意,它是排序後的第 k 小元素,而不是第 k 個不同的元素。matrix 1,5,9 10,11,13 12,13,15 k 8,返回 13。該題目在力扣中屬於中等難度,因此確實是有些難到我了?不過沒事,最...

LC 378 有序矩陣中第K小的元

傳送門 思路 1.對所有元素排序,時間複雜度 o n 2log n2 o n 2logn 2 o n2lo gn2 class solution 2.根據矩陣圖形的性質可知,小於等於某乙個數的圖形在矩陣左上方,大於該數的部分在右下方,且左上角數最小,右下角數最大,因此考慮二分答案,從a n 1 0 ...