java完成两个整数的交换,关于java:不用额外空间完成两个整数的交换

面试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,还是在面试官的揭示下才发现问题所在,再就是像面试官说的思路不够灵便,有时候反过来想一下就能发现一个更好的解决办法,再就是答复问题的时候把一个知识点说错了(只发现自己说错了一个,可能并不只是一个……),最初面试官说的是期待后续安顿,也不知是过还是没过,心愿能过吧。

下周的重点应该就是音讯队列和算法了,加油。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值