// 循环结束的条件必定是:left >= right // 所以:left == answer == right publicint(int[][] matrix, int k){ int m = matrix.length; int n = matrix[0].length; int left = matrix[0][0]; int right = matrix[m - 1][n - 1];
while (left < right) { int mid = (left + right) >> 1; int count = count(matrix, mid, m, n);
if (count < k) left = mid + 1; else right = mid; }
return right; }
privateintcount(int[][] matrix, int mid, int m, int n){ int i = m - 1; int j = 0; int count = 0;
while (i >= 0 && j < n) { if (matrix[i][j] <= mid) { j++; count += i + 1; } else i--; }
近期评论