初级会员
  • 第 48255 位会员
  • quanquan616
  • 2020-02-20 16:00:47
  • Offline
  • 73 88

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 感谢 @zerolinck 大佬的指点,终于把问题想明白了。 在【提交】代码时,LeetCode 会把测试用例 `[1, null, 2, 3]` 执行一遍,等下一次再跑其他测试用例时,仍旧在使用这个全局变量的切片。如果继续跑下去,所有的结果都会往这个全局切片的后面追加,最终导致结果与预期不符。 最终实现的代码如下: 闭包中局部变量的方式: ```go func preorderTraversal(root *TreeNode) []int { var res []int var prev func(node *TreeNode) prev = func(node *TreeNode) { if node == nil { return } res = append(res, node.Val) prev(node.Left) prev(node.Right) } prev(root) return res } ``` 全局变量方式: ```go var res []int func prev(node *TreeNode) { if node == nil { return } res = append(res, node.Val) prev(node.Left) prev(node.Right) } func preorderTraversal(root *TreeNode) []int { res = make([]int, 0) prev(root) return res } ```
  • 确实是好文章,感谢大佬分享。其实 2 楼的大佬,通过 C 语言的方式,已经提醒我了。 我个人的理解:直接获取切片中的元素地址,它其实是在访问这个切片,而不是在访问那个特殊的静态小整数数组。 `func dummy(b int) interface{}` 函数将一个 `int` 类型转换为借口类型,如果这个数值是 `[0 ~ 255]` 那么刚好就符合了站长文章中提及的:小整数转换为接口类型时,将不再需要额外的内存分配了。个人想想:因为这个小整数变成接口类型时,就存在于一个特殊的静态数组中。 我个人感觉,这个功能咋有点鸡肋 :sweat_smile: 。只有当小整数转换为接口类型时,才不会有额外的内存分配。直接初始化小整数时,还是会有内存分配。整数转换为接口类型,也是要消耗资源(虽然这个消耗很小很小)。直接让小整数不转换接口类型就能指向这个特殊的静态数组,它不香吗?没能理解官方为什么要这么设置。
  • 刚才修改了一些代码,并用站长文章中所写的 `bench` 思路尝试了一下,确实没有分配内存了。我这个折腾,实际上是在获取数组的内存地址。 从 `void *` 的角度来看,就是指针一个个往后挪,获取到的是数组中,每个索引的地址了。 ![无标题.jpg](https://static.studygolang.com/200930/c42458a17b4f26f17b46d51167331271.jpg)
  • 6 楼的建议是很实用的,我就是这样(当然我是兴趣学,跟专职学差别很大)。我拿着我之前的 Python Web 案例,重新用 Go 全部重写。重写完后,Go 的基础知识、基本语法、特性,也都掌握了。
  • leetcode-cn,这个执行用时很不靠谱。我一个菜鸟写了烂代码,居然显示击败100% ![image.png](https://static.studygolang.com/200521/6418e242036573f9c6d7ba03ea019af5.png)