| 123456789101112131415161718192021222324252627282930313233 | 
							- type array [][2]int
 
- func (a array) Len() int           { return len(a) }
 
- func (a array) Less(i, j int) bool { return a[i][0] < a[j][0] }
 
- func (a array) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
 
- func (a *array) Push(x interface{}) {
 
- 	*a = append(*a, x.([2]int))
 
- }
 
- func (a *array) Pop() interface{} {
 
- 	x := (*a)[a.Len()-1]
 
- 	*a = (*a)[:a.Len()-1]
 
- 	return x
 
- }
 
- func kthSmallest(matrix [][]int, k int) int {
 
- 	n := len(matrix)
 
- 	idx := make([]int, n)
 
- 	var pq array = make([][2]int, 0)
 
- 	for i := 0; i < n; i++ {
 
- 		heap.Push(&pq, [2]int{matrix[i][0], i})
 
- 	}
 
- 	for i := 0; i < k-1; i++ {
 
- 		x := heap.Pop(&pq).([2]int)
 
- 		idx[x[1]]++
 
- 		if nid := idx[x[1]]; nid < n {
 
- 			heap.Push(&pq, [2]int{matrix[x[1]][nid], x[1]})
 
- 		}
 
- 	}
 
- 	return heap.Pop(&pq).([2]int)[0]
 
- }
 
 
  |