算法数据结构技巧3:交换两个数字
3。交换两个数字
交换两个数字。我相信很多人每天都写过关于它的文章,我也相信你每次都会使用一个额外的变量来帮助你。交换 例如我们想要交换 x 和 y 值。传统代码如下:
int tmp = x;
x = y;
y = tmp;
输入此内容时遇到问题?没问题,很容易理解。如果有一天有人想让你难堪而不让你用其他辅助变量来完成交换怎么办? 别提了,采访中还真有人问过这个问题。在这一点上,诀窍是假装懂一点算术。代码如下:
x = x ^ y // (1)
y = x ^ y // (2)
x = x ^ y // (3)
天哪,太棒了!如果三者都是x^y,交换就莫名成功了。我在这里解释一下。我们知道,当两个相同的数互斥或时,结果是0,所以n ^ n = 0。而任何互斥或等于0的数字都是它本身,所以n ^ 0 = n。因此,解释如下:
将(1)中的x代入x(2),可得
y = x^y = (x^y)^y = x^(y^y) = x ^0 = x。 x 的值已成功分配给 y。
(3) 的推导如下:
x = x^y = (x^y)^x = (x^x)^y = 0^y = y。
这里我解释一下,XOR运算支持运算的交换律和结合律。
呢?你认为这很棒吗?
作者:帅
来源:知乎
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
上一篇:有用的算法技巧 1. 正确使用脚本 下一篇:数据结构算法技巧2. m的n次方
code前端网