378. 有序矩阵中第K小的元素
问题描述
给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。
请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。
二分查找
class Solution:
def kthSmallest(self, matrix: List[List[int]], k: int) -> int:
n = len(matrix)
def check(mid):
i, j = n - 1, 0
num = 0
while i >= 0 and j < n:
if matrix[i][j] <= mid:
num += i + 1
j += 1
else:
i -= 1
return num >= k
left, right = matrix[0][0], matrix[n - 1][n - 1]
while left < right:
mid = (left + right) // 2 #因为此处向下取整,所以是right = mid, left = mid + 1
if check(mid):
right = mid
else:
left = mid + 1
return left