package main import ( "container/heap" "fmt" ) type IntHeap []int func(h IntHeap) Len() int {return len(h)} func(h IntHeap) Less(i, j int) bool {return h[i]>h[j]} func(h IntHeap) Swap(i,j int) {h[i],h[j] = h[j],h[i]} func(h *IntHeap) Push(x interface{}) { *h = append(*h,x.(int)) } func(h *IntHeap) Pop() interface{} { old := *h n := len(old) x := old[n-1] *h = old[0:n-1] return x } func(h IntHeap) Peek() interface{} { x := h[0] return x } func main() { var ( n int k int num int ) fmt.Scan(&n,&k) arr := make([]int,n) for i:=0;i<n;i++ { fmt.Scan(&num) arr[i] = num } result := getMinKNumsByHeap(arr,k) for i:=0;i<len(result);i++ { fmt.Printf("%d ",result[i]) } } func getMinKNumsByHeap(array []int, k int) []int{ if len(array) == 0 || k < 0 || k > len(array) { return []int{} } maxHeap := &IntHeap{} heap.Init(maxHeap) for i:=0;i<k;i++ { heap.Push(maxHeap,array[i]) } for i:=k;i<len(array);i++ { if array[i] < maxHeap.Peek().(int) { heap.Pop(maxHeap) heap.Push(maxHeap,array[i]) } } return *maxHeap }