public int kthSmallest(int[][] matrix, int k) {
int len = matrix.length;
int low = matrix[0][0],high= matrix[len-1][len-1];
while(low<=high){
int mid = low + (high-low)/2;
int count = helper(matrix,mid);
if(count<k) low = mid+1;
else high = mid-1; //排除mid不在矩陣內(nèi)的情況,所以只能等到low和high時(shí)才退出循環(huán)
}
return low;
}
private static int helper(int[][] matrix, int mid) {
// TODO Auto-generated method stub
int i = matrix.length-1,j=0;
int res = 0;
while(i>=0&&j<matrix[0].length){
if(matrix[i][j]>mid) i--;
else{
res+=i+1;
j++;
}
}
return res;
}
根據(jù)二分搜索法,獲取中間值,然后搜索他是否為第k個(gè)值。
主要中間值不在矩陣內(nèi)的情況。這就是
if(count<k) low = mid+1;
else high = mid-1;
這段語(yǔ)句的作用.