有序矩阵中第K小的元素(LeetCode )

给定一个 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 升序(默认)。

猜你喜欢

转载自www.cnblogs.com/ethanyue/p/9439543.html
今日推荐