题目来源
一个矩阵数组,从左到右,从上到下排好序。求第k大。
没想到怎么做。
然后看了讨论区。
用二分,每次都计算出小于等于mid的个数,
class Solution {
public:
int kthSmallest(vector<vector<int>>& matrix, int k) {
int n = matrix.size();
int l = matrix[0][0], r = matrix[n-1][n-1], mid = 0;
while (l < r) {
mid = (l + r) / 2;
int j = n - 1, cnt = 0;
for (int i=0; i<n; i++) {
while (j >= 0 && matrix[i][j] > mid)
j--;
cnt += j + 1;
}
if (cnt < k)
l = mid + 1;
else
r = mid;
}
return l;
}
};