Medium
首先想到的最为粗暴的方式,是将二维数组转化成一维数组,重新进行排序之后得出结果
尝试写一下代码,AC!
python3
class Solution:
def kthSmallest(self, matrix: List[List[int]], k: int) -> int:
temp = []
for i in range(len(matrix)):
temp += matrix[i]
return sorted(temp)[k-1]
对于一个有序的数列我们可以使用二分的方式搜索目标值。
mid
,找到这个值是数组中的第n
个n>=k
我们就找大的值,如果n<k
我们就往较小的值找我们这样就需要解决几个问题,一个是如何找到中间值mid
是第几个最小的元素,另一个是边界条件
对于第一个问题我们可以参考240. 搜索二维矩阵 II的解法
对于第二个问题,我们可以通过分析边界,可调试来解决
以上,尝试写一下代码,AC!
python3
class Solution:
def findNum(self, matrix, m):
num = 0
i = len(matrix) - 1
j = 0
while i >= 0 and j >= 0 and i < len(matrix) and j < len(matrix):
if matrix[i][j] > m:
i -= 1
else:
j += 1
num += i+1
return num
def kthSmallest(self, matrix: List[List[int]], k: int) -> int:
start = matrix[0][0]
end = matrix[-1][-1]
while start < end:
mid = start + (end - start) // 2
n = self.findNum(matrix, mid)
if n >= k:
end = mid
else:
start = mid + 1
return start