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


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

难度中等264收藏分享切换为英文关注反馈

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

示例:

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

返回 13。

提示:
你可以假设 k 的值永远是有效的,1 ≤ k ≤ n2

Imgur

Imgur

class Solution {
    public int kthSmallest(int[][] matrix, int k) {
        int n = matrix.length;
        int l = matrix[0][0];
        int r = matrix[n-1][n-1];

        while (l<r){
            int mid = l+(r-l)/2;
            if(panduan(matrix,n,mid,k)){
                r = mid;
            }else {
                l=mid+1;
            }
        }
        return l;
    }

    public boolean panduan(int[][] matrix, int n, int mid, int k) {
        int i = n - 1;
        int j = 0;
        int ans = 0;
        while (i >= 0 && j <= n - 1) {
            if (matrix[i][j] <= mid) {
                ans+=(i+1); //竖向的个数
                j++;
            } else {
                i--;
            }
        }
        return ans >= k;
    }
}

文章作者: anlen123
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 anlen123 !
 本篇
378.有序矩阵中第K小的元素 378.有序矩阵中第K小的元素
378. 有序矩阵中第K小的元素难度中等264收藏分享切换为英文关注反馈 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。 示例: ma
2020-07-02 anlen123
下一篇 
718.最长重复子数组 718.最长重复子数组
718. 最长重复子数组难度中等210 给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。 示例 1: 输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出: 3 解释: 长度最长的公共子数组
2020-07-01 anlen123
  目录