当前位置:   article > 正文

LeetCode-378. 有序矩阵中第K小的元素 Python3版本

有序矩阵中第k小的元素 python

378. 有序矩阵中第K小的元素


给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。
请注意,它是排序后的第k小元素,而不是第k个元素。

示例:

  1. matrix = [
  2. [ 1, 5, 9],
  3. [10, 11, 13],
  4. [12, 13, 15]
  5. ],
  6. k = 8,
  7. 返回 13。

说明: 
你可以假设 k 的值永远是有效的, 1 ≤ k ≤ n2 。

解题思路:看到这种有序(或者部分有序)的数组,一般考虑使用二分查找进行优化。开始时,左指针指向矩阵中最小元素,右指针指向矩阵中最大元素(注意:指针代表的是元素值,而不是位置),计算矩阵中小于等于左右指针中间值的元素个数c,然后通过比较c与k的值,进行左指针或者右指针的移动。重复上述过程直到l >= r.

Python3代码如下:

  1. class Solution(object):
  2. def kthSmallest(self, matrix, k):
  3. """
  4. :type matrix: List[List[int]]
  5. :type k: int
  6. :rtype: int
  7. """
  8. l = matrix[0][0]
  9. r = matrix[-1][-1]
  10. while l < r:
  11. mid = (l+r)//2
  12. c = sum(bisect.bisect_right(row,mid) for row in matrix)
  13. # bisect.bisect_right(row,mid)计算row中元素值<=mid的数量
  14. if c < k:
  15. l = mid + 1
  16. else:
  17. r = mid
  18. return l

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/982671
推荐阅读
相关标签
  

闽ICP备14008679号