我指的是 leetcode 问题:Kth Smallest Element in a Sorted Matrix
该问题有两种众所周知的解决方案。一种使用 Heap/PriorityQueue,另一种使用 Binary Search。二进制搜索解决方案是这样的(顶帖):
public class Solution {
public int kthSmallest(int[][] matrix, int k) {
int lo = matrix[0][0], hi = matrix[matrix.length - 1][matrix[0].length - 1] + 1;//[lo, hi)
while(lo < hi) {
int mid = lo + (hi - lo) / 2;
int count = 0, j = matrix[0].length - 1;
for(int i = 0; i < matrix.length; i++) {
while(j >= 0 && matrix[i][j] > mid) j--;
count += (j + 1);
}
if(count < k) lo = mid + 1;
else hi = mid;
}
return lo;
}
}
虽然我了解这是如何工作的,但我无法解决一个问题。我们如何确定返回lo
的总是在矩阵中?
由于搜索空间是数组的值,因此不需要是数组min
中的值。但是,返回的总是。max
mid
lo
为什么会这样?