給定一個 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 升序(默認)。