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

https://leetcode-cn.com/problems/kth-smallest-element-in-a-sorted-matrix/

解法一:二分

参考官方题解的方法三,非常精妙的二分

class Solution:
    def kthSmallest(self, matrix: List[List[int]], k: int) -> int:
        n=len(matrix)
        #判断不大于mid的数是否超过k个
        def check(mid):
            i=n-1
            j=0
            num =0
            while i >= 0 and j < n:
                if matrix[i][j] <= mid:
                    j += 1
                    num += i+1
                else:
                    i -=1
            return num >=k
        l=matrix[0][0]
        r = matrix[-1][-1]
        while l < r:
            mid = l+ (r-l)//2
            #不大于mid的数不少于k,说明最终答案x不大于mid
            if check(mid):
                r = mid
            #数量少于k,说明最终答案x大于mid
            else:
                l = mid+1
            print(l,r)
        return l

最后更新于