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

题目链接
难度:中等       类型: 数组、二分查找


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

示例

matrix = [
[ 1, 5, 9],
[10, 11, 13],
[12, 13, 15]
],
k = 8,
返回 13。

解题思路


初始时,最小值l为matrix[0][0],最大值h为matrix[n-1][m-1],

  1. 中值mid=(l+h)/2, 计算mid的位置,是第j小的数
  2. 当j<k时, l = mid+1; 当j>k时, h=mid
    重复上述步骤,直到不符合l<h

代码实现

class Solution(object):
    def kthSmallest(self, matrix, k):
        """
        :type matrix: List[List[int]]
        :type k: int
        :rtype: int
        """
        n, m = len(matrix), len(matrix[0])
        l, h = matrix[0][0], matrix[n-1][m-1]
        
        while l < h:
            count = 0
            mid = l + (h-l)//2
            for i in range(n):
                j = m-1
                while j>=0 and matrix[i][j]>mid:
                    j -= 1               
                count += j+1
                #print(count, k)
            if count>=k:
                h = mid
            else:
                l = mid + 1
        return l

本文链接://www.greatytc.com/p/04289b55120a

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,417评论 0 2
  • 一年级语文上册生字表 生字表一(共400字) 啊(ā)爱(ài)安(ān)岸(àn)爸(bà)八(bā)巴(bā)...
    meychang阅读 2,886评论 0 6
  • 究竟是什么样的孤独能持续百年之久?在未读这本书之前,很多时候,我都有想过什么是“孤独”,不少的经典名句也有很...
    从前有座山山里有个庙阅读 867评论 0 2
  • 01 熟悉我的人可能会知道,我从去年开始写每月计划,但是现在却停了下来。原因何在呢? 因为月计划时间间隔太长,月初...
    朱子先生的摄影思维阅读 424评论 1 6
  • 此函数的关键就是localeCompare函数。在stackoverflow提问中,有人提到要用到a.locale...
    strong9527阅读 1,553评论 0 0