共计 750 个字符,预计需要花费 2 分钟才能阅读完成。
面试 4 分实力,6 分运气,本周运气还不错,遇到的面试题都是看过的,心愿这次的一面能过吧。
本周遇到的其中一个面试题就是这个:在不应用额定空间的状况下,实现两个整数的值替换,问题不难,然而若没看见过,置信能在面试的缓和环境下想进去的必定不算多。
加减法
先假如 a = 1 , b = 2
,要替换 a 和 b。
- 执行
a = a + b
,当初 a 就是 a + b。 - 执行
b = a - b
,b 就相当于 a + b – b 等于原来的 a,b 就变成 a 了。 - 执行
a = a - b
,当初 b 就是原来的 a,a 就相当于 a + b – a 就等于原来的 b,a 变成 b 了。
想想这个办法会有什么问题吗?
两个整数相加的时候咱们就不得不思考溢出的问题了,所以这办法是行不通的。
异或法
当初我的感触就是,若是一个跟计算无关的问题想不到解决办法的时候,那它多半就是和位运算无关了。
而这题就能够通过异或实现(幸好看见过,不然面试还真想不起来)
- 任何数和 0 异或,都得任何数。
- 任何数与本身异或,都得 0。
先假如 a = 1 , b = 2
,要替换 a 和 b。
- 执行
a = a ^ b
,当初 a 就是 a ^ b。 - 执行
b = a ^ b
,b 就相当于 a ^ b ^ b 等于原来的 a,b 就变成 a 了。 - 执行
a = a ^ b
,当初 b 就是原来的 a,a 就相当于 a ^ b ^ a 就等于原来的 b,a 变成 b 了。
总结
面试之前原本对这次面试不报心愿,因为面的前一天才打电话告诉,而基础知识又曾经含糊了,还好简略的过了一遍,面的时候问的也不算很难,但依然有有余,首先依然是算法,一道不难的题但仍没有做到一次 bug free,还是在面试官的揭示下才发现问题所在,再就是像面试官说的思路不够灵便,有时候反过来想一下就能发现一个更好的解决办法,再就是答复问题的时候把一个知识点说错了(只发现自己说错了一个,可能并不只是一个……),最初面试官说的是期待后续安顿,也不知是过还是没过,心愿能过吧。
下周的重点应该就是音讯队列和算法了,加油。
正文完