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

2021-10-09 10:48:57 字數 891 閱讀 4786

給定乙個n x n矩陣,其中每行和每列元素均按公升序排序,找到矩陣中第k小的元素。

這道題和之前的搜尋二維矩陣2類似。都是從矩陣的左下角開始遍歷。第k小的元素有乙個範圍,在最大值和最小值之間進行二分搜尋。

from typing import *

class solution:

def check(self, matrix, val):

'''找到矩陣中小於等於val元素的個數

:param matrix:

:param val:

:return:

'''m, n = len(matrix), len(matrix[0])

i, j = m - 1, 0

cnt = 0

while i >= 0 and j < n:

if matrix[i][j] <= val:

cnt += (i + 1)

j += 1

else:

i -= 1

return cnt

def kthsmallest(self, matrix: list[list[int]], k: int) -> int:

l, r = matrix[0][0], matrix[-1][-1]

while l <= r:

mid = (l + r) // 2

num = self.check(matrix, mid)

if num >= k: # 找到的為最小的l,最小的l正好在陣列中

# 大於等於時要向左搜尋

r = mid - 1

else:

l = mid + 1

return l

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 解題方法 使用優先佇列...

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 此題用二分法。給定二維...