这是我在网上找到的示例代码。
func FindBestKElements(nums []int, k int) []int {
h := &IntHeap{}
for _, val := range nums { // O(N)
heap.Push(h, val) // O(log K)
if h.Len() > k {
heap.Pop(h) // O(log K)
}
}
return func() []int { // O (k log k)
result := make([]int, h.Len())
initialLen := h.Len()
for i := initialLen; i > 0; i-- {
result[i-1] = heap.Pop(h).(int)
}
return result
}()
}
该函数的 return 语句返回运行匿名函数的结果。我不确定这样做会给你带来什么好处。
例如,为什么我们不能像下面这样编写上述方法?
func FindBestKElements(nums []int, k int) []int {
h := &IntHeap{}
for _, val := range nums { // O(N)
heap.Push(h, val) // O(log K)
if h.Len() > k {
heap.Pop(h) // O(log K)
}
}
result := make([]int, h.Len())
initialLen := h.Len()
for i := initialLen; i > 0; i-- {
result[i-1] = heap.Pop(h).(int)
}
return result
}
白猪掌柜的
相关分类