这是我在网上找到的示例代码。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}
1 回答
![?](http://img1.sycdn.imooc.com/54584de700017cbd02200220-100-100.jpg)
白猪掌柜的
TA贡献1893条经验 获得超10个赞
在给定的示例中,它似乎是多余的。但是,在某些情况下,它可能是有用的。举个例子:
package main
func main() {
a := []int{10, 20, 30, 40}
var b bool
for _, n := range a {
if n == 20 { b = true }
}
if b {
println("pass")
} else {
println("fail")
}
}
您可以使用另一个函数来代替状态变量:b
package main
func main() {
a := []int{10, 20, 30, 40}
if func() bool {
for _, n := range a {
if n == 20 { return true }
}
return false
}() {
println("pass")
} else {
println("fail")
}
}
- 1 回答
- 0 关注
- 76 浏览
添加回答
举报
0/150
提交
取消