给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。
请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。
示例:
matrix = [
[ 1, 5, 9],
[10, 11, 13],
[12, 13, 15]
],
k = 8,
返回 13。
提示:
你可以假设 k 的值永远是有效的, 1 ≤ k ≤ n2 。
解法:二分+二分
public int kthSmallest(int[][] matrix, int k) {
int row = matrix.length;
int col = matrix[0].length;
int low = matrix[0][0];
int high = matrix[row-1][col-1];
while(low<high){
int count = 0;
int mid = low+(high-low)/2;
for(int i=0;i<row;i++){
for (int j=0;j<col;j++){
if(matrix[i][j]<=mid){
count++;
}
}
}
if(count<k){
low = mid+1;
}else {
high = mid;
}
}
return low;
}