funckthSmallest(matrix [][]int, k int)int{
n :=len(matrix)
left, right := matrix[0][0], matrix[n-1][n-1]for left <= right {
mid := left +(right - left)/2// 计算matrix矩阵中小于mid 的元素个数
smallNum :=countSmall(matrix, mid, n)// fmt.Println(smallNum)if smallNum == k {
right = mid -1// 不要怕错过,最终一定会在此处汇聚}elseif smallNum < k {// mid太小,增大mid
left = mid +1}else{
right = mid -1}}return left
}// 计算matrix矩阵中小于mid 的元素个数funccountSmall(matrix [][]int, mid int, n int)int{var num int
i, j := n -1,0for i >=0&& j <= n -1{if matrix[i][j]<= mid {
j++
num += i +1}else{
i--}}return num
}