为什么仅仅以不同的顺序或风格编写代码会改变整个运行时
例如:
为什么
result += "1"
比result = "1" + result
更快?
更详细的示例:
在为这个Leetcode问题写了一个成功的程序之后-添加二进制
这里我有两个代码片段都是相同的,但有一个非常细微的区别。
代码1
def addBinary(a, b):
max_len = max(len(a), len(b))
a = a.zfill(max_len)
b = b.zfill(max_len)
result = ""
carry = 0
for i in range(len(a)-1, -1, -1):
x = int(a[i])
y = int(b[i])
_sum = x + y + carry
if _sum == 3:
result += "1"
carry = 1
elif _sum == 2:
result += "0"
carry = 1
elif _sum == 1:
result += "1"
carry = 0
else:
result += "0"
carry = 0
if carry == 1:
result += "1"
return result[::-1]
代码2
def addBinary(a, b):
max_len = max(len(a), len(b))
a = a.zfill(max_len)
b = b.zfill(max_len)
result = ""
carry = 0
for i in range(len(a)-1, -1, -1):
x = int(a[i])
y = int(b[i])
_sum = x + y + carry
if _sum == 3:
result = "1" + result
carry = 1
elif _sum == 2:
result = "0" + result
carry = 1
elif _sum == 1:
result = "1" + result
carry = 0
else:
result = "0" + result
carry = 0
if carry == 1:
result += "1"
return result
CODE1的运行时为16 ms
,CODE2为47 ms
。为什么?
在末尾添加字符经过内部优化,可以在内存中重用相同的字符串(字符数组(。在开头添加需要创建一个新字符串,每个字符的位置都会发生偏移。