求有序矩阵中第k小元素

有序矩阵:每行和每列都是递增的

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
}

猜你喜欢

转载自blog.csdn.net/qingxili/article/details/79890026
今日推荐