记一下左程云大佬讲的一个知识点!
一.方法及注意事项
一般写两个数交换的代码可能会引入一个temp
作为中转。如下:
def swap(a,b):
# python可以写成:a,b=b,a
temp = a
a = b
b = temp
print(a,b) #output:2 1
swap(1,2)
但此时由于引入常数级的变量,将造成额外空间复杂度=O(1)
下面介绍一种利用异或运算的无额外空间复杂度的交换方式,代码如下:
def swap(a,b):
# python可以写成:a,b=b,a
a = a ^ b
b = a ^ b
a = a ^ b
print(a,b) #output: 2 1
swap(1,2)
讲解上述代码:
异或运算具有一些性质:
(1)N与0异或等于N本身;N与N本身异或等于0
N ^ 0 = N
N ^ N = 0
(2)异或运算满足交换律和结合律:
a ^ b = b ^ a
(a ^ b) ^ c = a ^ (b