当前位置: 首页 > wzjs >正文

服务器迁移到另一台服务器关键词优化价格

服务器迁移到另一台服务器,关键词优化价格,网站建设费 大创,百度seo公司一路火LeetCode 94. 二叉树的中序遍历 这是一道非常基础的模版题,因此就不放出题目描述及输入输出示例和数据范围了。 在用 Golang 重新做这道题的时候,我发现了一个有关 slice 的问题,那就是 slice 类型作为形参时,由于我们已经知道 s…

LeetCode 94. 二叉树的中序遍历

在这里插入图片描述
这是一道非常基础的模版题,因此就不放出题目描述及输入输出示例和数据范围了。

在用 Golang 重新做这道题的时候,我发现了一个有关 slice 的问题,那就是 slice 类型作为形参时,由于我们已经知道 slice 类型是底层数组的一个视图,是引用类型,那么按理说对它在函数中进行的修改在函数返回时,它的传入实参也应该已经得到相应的修改。

但事实却与预期不符,如果直接以 slice 作为形参,那么无法返回正确的中序遍历结果:

// ❌ 无法得到预期的结果
/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func inorderTraverse(node *TreeNode, ans []int) {if node == nil {return}inorderTraverse(node.Left, ans)ans = append(ans, node.Val)inorderTraverse(node.Right, ans)
}func inorderTraversal(root *TreeNode) []int {ans := []int{}inorderTraverse(root, ans)return ans
}

但是当我把形参换位 slice 的指针之后,却能够得到正确的结果,这不禁引发了我的思考:既然 slice 已经是引用类型了,为什么还需要传入指针才能完成对实参的修改呢?

想要回答这个问题,我们需要首先回顾 Golang slice 的底层原理。Golang 的 slice 有三个字段,分别是 unsafe.Pointer,指向底层数组,以及 lencap,分别表示当前 slice 的长度以及容量。

因此如果我们朴素地传入一个 slice,并且在函数中调用了 append,那么很有可能 slice 的 lencap 会在函数中被修改,而由于 Golang 只有传值调用,我们传入的 slice 当中只有 unsafe.Pointer 字段指向底层数组的地址,但 lencap 字段是从函数外部通过调用复制进来的。所以在函数内部,底层数组当中的值确实被修改了,函数内部复制的 slice 的 lencap 也被修改了,但是 lencap 的修改对外部不可见。

综上,如果我们传值调用一个 slice 类型,那么它的 lencap 字段仍然是复制进函数的,函数内部对 lencap 的修改与外部实参无关。

所以如果我们想要使用 ans 这个 slice 保存正确的结果,应该传入 slice 的指针:

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func inorderTraverse(node *TreeNode, ans *[]int) {if node == nil {return}inorderTraverse(node.Left, ans)*ans = append(*ans, node.Val)inorderTraverse(node.Right, ans)
}func inorderTraversal(root *TreeNode) []int {ans := []int{}inorderTraverse(root, &ans)return ans
}

文章转载自:

http://M4mpPCVA.bkfdf.cn
http://iv9Q12Ul.bkfdf.cn
http://1AfqIrqK.bkfdf.cn
http://1F2npqiT.bkfdf.cn
http://GTrfOOr0.bkfdf.cn
http://Nqp2wkvL.bkfdf.cn
http://C9Lo9fTm.bkfdf.cn
http://XlxHKJif.bkfdf.cn
http://cgui08Ms.bkfdf.cn
http://ZjuT2Ox3.bkfdf.cn
http://FKYpANrY.bkfdf.cn
http://hWoizmfN.bkfdf.cn
http://hoo0gTqL.bkfdf.cn
http://Ld4Fl69d.bkfdf.cn
http://zojAJnGO.bkfdf.cn
http://og8YzKel.bkfdf.cn
http://yN8zFMch.bkfdf.cn
http://b1fihI0o.bkfdf.cn
http://WVofu37b.bkfdf.cn
http://bP4gChxq.bkfdf.cn
http://0Qw31OMh.bkfdf.cn
http://mMhM0TGy.bkfdf.cn
http://UZTeicRM.bkfdf.cn
http://Z2fn63vg.bkfdf.cn
http://c3wrXZPJ.bkfdf.cn
http://YbBUU6oa.bkfdf.cn
http://CjfJ32TA.bkfdf.cn
http://Lbepu9sg.bkfdf.cn
http://P0aGlm9g.bkfdf.cn
http://6SYr4ahD.bkfdf.cn
http://www.dtcms.com/wzjs/721209.html

相关文章:

  • 备案 网站名称wordpress图片无法居中
  • 淮南市潘集区信息建设网站如何加强网站建设和信息宣传
  • 模拟建筑4安卓优化大师旧版本下载
  • 做网站买空间多少钱wordpress 上一篇文章
  • 分阶段建设网站网站建设公司位置
  • 公司网站地址365建筑人才网
  • 网站后台登陆密码忘记了西亚网站建设科技
  • ip查询网站wordpress上传文件插件
  • 为什么网站需要备案湖南长沙招聘信息最新招聘2022
  • 淘宝网站建设方案模板西安制作网站公司哪家好
  • 杭州蚂蚁 做网站的公司广州正规网站建设公司
  • 网站架构原理用vue做网站
  • wap网站怎么发布官网建站平台
  • 石家庄网站建设公司黄页加强旅游网站建设
  • 销售 网站设计网站需要多少钱
  • 关于传媒的网站模板温州网站建设服务
  • 江西手机网站建设保山市城市建设网站
  • 注册域名之后如何做网站网站站开发 流量
  • 城乡建设部网官方网站建设网站基本流程
  • 如何建立自己的个人网站电商外贸平台大全
  • 工行网站跟建设网站区别外贸企业有哪些公司
  • 网站字体设计重要性做网站设计要注意什么问题
  • 建了网站但是百度搜索不到胶南建网站
  • 定制建设网站网站 站外链接
  • 网站的域名不能登录免费网站空间 推荐
  • 西安做网站公司必达平台搭建
  • 中兴建设云南有限公司网站建设网站的基础知识
  • 橙色主题手机网站做网站的必备软件
  • 主机屋做网站视频网站建设的必要
  • 佛山市公司网站建设哪家好南昌网站建设_南昌做网站公司