- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Go程序员面试分类模拟题29
论述题
1.?题目描述:
??单链表有环指的是单链表中某个结点的next域指向的是链表中在它之前的某一个结点,这样在链表的尾部形成一个环形结构。如何判断单链表是否有环存在?
(江南博哥)正确答案:
方法一:蛮力法
??定义一个Set用来存放结点的引用,并将其初始化为空,从链表的头结点开始向后遍历,每遍历到一个结点就判断Set中是否引用这个结点,如果没有,说明这个结点是第一次访问,还没有形成环,那么将这个引用结点添加到指针Set中去。如果在Set中找到了同样的结点,那么说明这个结点已经被访问过了,于是就形成了环。这种方法的时间复杂度为O(n),空间复杂度也为O(n)。
??方法二:快慢指针遍历法
??定义两个指针fast(快)与slow(慢),二者的初始值都指向链表头,指针slow每次前进一步,指针fast每次前进两步,两个指针同时向前移动,快指针每移动一次都要跟慢指针比较,如果快指针等于慢指针,就证明这个链表是带环的单向链表,否则,证明这个链表是不带环的循环链表。
[考点]如何检测一个较大的单链表是否有环
?
2.?题目描述:
??如何把十进制数(long型)分别以二进制和十六进制形式输出?
正确答案:
由于十进制数本质上还是以二进制的方式来存储的,在实现的时候可以把十进制数看成二进制的格式,通过移位的方式计算出每一位的值。为了方便起见,下面以byte类型的数为例介绍实现方法,假如现在要把十进制数7以二进制的形式来输出,由于7的二进制的表示计算第6位二进制码是0还是1的方法为:首先把这个值左移6位得然后再右移7位,得移位后得到的值就是第6位二进制码的值。由此可以得出如下计算方法:假设十进制数对应的二进制数的长度为binNum,那么计算十进制数n的第i位二进制码值的公式为n<<i>>binNum-1。通过这种计算方法可以得到每一位的值,然后把对应的值存储在字符数组中即可。
??上面介绍的方法使用的是移位操作,虽然效率比较高,但是难以理解。下面介绍一种简单的转换为十六进制的方法。可以使用类似于十进制转二进制的方法。把十进制的数对16求余数。得到的结果就是十六进制的最后一位,然后把这个十进制数除以16,用得到的数继续使用相同的方法计算其他的位数。需要注意的是对于十六进制10~15需要转换为A~F。示例代码如下:
??packagemare
??import(
??bytes
??fmt
??)
??funcintToBinary(nint)string{
??ifn<0{
??fmt.Println(不支持负数)
??return
??}
??hexNum:=8*8;//二进制的位数(long占8个字节)
??varpBinarybytes.Buffer
??fori:=0;i<hexNum;i++{??
??//先左移i位把pBinary[i]移到最高位,然后右移hexNum-1位把pBinary[i]移到最后一位
??tmpBinary:=(n<<uint(i))>>(uint(hexNum)-1)??
??if(tmpBinary==0){
??pBinary.WriteRune(0)
??}else{
??pBinary.WriteRune(1)
??}
??}
??returnpBinary.String()
??}
??funcintToHex(sint)string{
??hex:=
??remainder:=0
??fors!=0{
??remainder=s%16
??if(remainder<10){
??hex=string(remainder+0)+hex
??}else{
??hex=string(remainder-10+A)+hex
??}??
??s=s>>4
??}
??returnhex
??}?
??funcmain(){
??fmt.Println(10的二进制输出为:,intToBinary(10))
??fmt.Println(10的十六进制输出为:,intToHex(10))
??}
??程序的运行结果为
??10的二进制输出为:0000000000000000000000000000000000000000000000000000000000001010
??10的十六进制输出为:A
[考点]如何把十进制数(long型)分别以二进制和十六进制形式输出
?
3.?题目描述:
??不使用^操作实现异或运算。
正确答案:
最简单
您可能关注的文档
最近下载
- 创业公司管理系统股权分配规划.pdf VIP
- 金融工程研究报告:量化交易,算法原理、类型与发展史-20230911-浙商证券-17页.docx VIP
- 神经外科术后患者的早期康复锻炼新进展.pptx
- G13—100SQF钢筋混凝土化粪池.docx VIP
- 金融工程深度:多因子量化投资框架梳理-20240222-浙商证券-21页.pdf VIP
- GB 50650-2011(2022年版) 石油化工装置防雷设计规范.docx VIP
- 城市轨道交通客运组织全书教学课件电子教案.pptx VIP
- 杭叉J系列1-5吨 电动叉车使用手册.pdf VIP
- 110KV送出线路施工安全措施.doc VIP
- 第一部分第二.三节兴趣与职业生涯发展的关系.ppt VIP
文档评论(0)