程序运行时背后的逻辑是什么



为什么仅仅以不同的顺序或风格编写代码会改变整个运行时

例如:

为什么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 msCODE247 ms。为什么?

在末尾添加字符经过内部优化,可以在内存中重用相同的字符串(字符数组(。在开头添加需要创建一个新字符串,每个字符的位置都会发生偏移。

最新更新