有序矩阵:每行和每列都是递增的
Output:矩阵元素从小到大排序后第k个元素
Example:
matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ], k = 8, return 13.
思路:
二分查找
1.以值空间为搜索空间
2.以统计个数与k比较作二分区间判断
代码实现:
func kthSmallest(matrix [][]int, k int) int {
n := len(matrix)
low := matrix[0][0]
high := matrix[n-1][len(matrix[0])-1] + 1
for low < high {
mid := low+ (high-low) / 2
count := 0
j := len(matrix[0]) - 1
for i := 0; i < n; i++ {
for j >= 0 && matrix[i][j] > mid {
j--
}
count += j + 1
}
if count < k {
low = mid + 1
} else {
high = mid
}
}
return low
}