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。


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;
}
}