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





方法一:二分查找。

class Solution(object):
    # 二分查找
    def kthSmallest(self, matrix, k):
        """
        :type matrix: List[List[int]]
        :type k: int
        :rtype: int
        """
        n = len(matrix)
        low, high = matrix[0][0], matrix[n - 1][n - 1]
        while low < high:
            # 计算矩阵中值
            mid = low + int((high - low) / 2)
            # 统计小于等于mid的元素个数
            count = 0
            i, j = 0, n - 1
            while j >= 0 and i < n:
                if matrix[i][j] <= mid:
                    count += j + 1
                    i += 1
                else:
                    j -= 1

            if count < k:
                low = mid + 1
            else:
                high = mid
        return low

方法二:暴力解。

class Solution(object):
    # 代码一
    def kthSmallest(self, matrix, k):
        """
        :type matrix: List[List[int]]
        :type k: int
        :rtype: int
        """
        temp = []
        for i in range(len(matrix)):
            temp += matrix[i]
        temp.sort()
        return temp[k - 1]

    # 代码二
    def kthSmallest(self, matrix, k):
        """
        :type matrix: List[List[int]]
        :type k: int
        :rtype: int
        """
        m = len(matrix)
        n = len(matrix[0])
        temp = matrix[0]
        for i in range(1, m):
            for j in range(n):
                temp.append(matrix[i][j])
        temp.sort()
        return temp[k - 1]
posted @ 2020-06-08 13:47  人间烟火地三鲜  阅读(165)  评论(0编辑  收藏  举报