给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。
请注意,它是排序后的第k小元素,而不是第k个元素。
示例:
matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ], k = 8, 返回 13。
说明:
你可以假设 k 的值永远是有效的, 1 ≤ k ≤ n2 。
解法:
我的第一想法是观察到该矩阵只是按行或者按列排序的,所以并不是说矩阵就是完全按照大小顺序排列的,例如matrix[0][2]>matrix[1][2],,所以要找矩阵中第k小的元素,则直接将该矩阵中的所有元素升序排序即可,我的方法是遍历该二维矩阵,将其赋值给一个列表,然后将该列表排序后,可直接得出第k小的元素
代码如下:
class Solution(object):
def kthSmallest(self, matrix, k):
"""
:type matrix: List[List[int]]
:type k: int
:rtype: int
"""
list=[]
for i in range(len(matrix)):
for j in range(len(matrix[0])):
list.append(matrix[i][j])
list.sort()
return list[k-1]
注意点:
1.涉及到二维矩阵的遍历:
for i in range(len(matrix)):
for j in range(len(matrix[0])):
2.涉及到列表的排序:
list.sort(cmp=None,key=None,reverse=False)
- cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。