378. 有序矩阵中第K小的元素 【LeetCode|Java实现 LeetCode 378 有序矩阵中第K小的元素】给定一个 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 left = matrix[0][0], right = matrix[n-1][n-1];
while(left < right){
int mid = (left + right)/2;
int cnt = numMid(matrix, n, mid);
//System.out.println(cnt);
if(cnt >= k){
right = mid ;
} else {
left = mid + 1;
}
}
return right;
}int numMid(int[][] matrix, int n, int mid){
int i = 0, j = n - 1;
int cnt = 0;
while(i=0){
if(matrix[i][j] > mid){
j--;
} else {
cnt += (j+1);
i++;
}
}
return cnt;
}
}
推荐阅读
- 《LeetCode算法全集》|?算法入门?《二分枚举》简单13 —— LeetCode 1351. 统计有序矩阵中的负数
- 算法|二分查找与移除元素(JavaScript语言实现)
- 面试|腾讯三面终拿Offer,关于redis,高并发,分布式,微服务一键领取
- Linux|再见 Xshell~ 这款开源的终端工具逼格更高
- 数据库|redis
- 数据库|Oracle12cWindows安装、介绍及简单使用(图文)
- linux|答应我不要再用Xshell了 这个新开源的终端工具酷炫又好用
- 程序员|怎么用Redis分布式锁才能确保万无一失(进阶加薪全靠它!)
- 程序员|SpringCloud微服务详解(最新“美团+字节+腾讯”三面问题)