有什么方法可以减少此代码的时间和代码

时间:2019-05-14 04:37:47

标签: python python-3.x time-complexity

我编写了一个运行时间为O(n ^ 2)的程序,有可能在不使用嵌套的forloops和内置函数的情况下降低代码和复杂度,而它是一个匹配的整数问题,输出为[4,5]


a = 12345
b = 49085
l1 = []
l2 = []
l_match = []
while(a != 0):
    c = a % 10
    l1.append(c)
    a //= 10
while(b!= 0):
    d = b % 10
    l2.append(d)
    b //= 10
for i in range(len(l1)):
    for j in range(len(l2)):
        if l1[i] == l2[j]:
            match = l1[i]
            l_match.append(match)
print(l_match)

3 个答案:

答案 0 :(得分:2)

如果我理解正确,如果我错了,请纠正我,目的是在两个数字之间找到共同的数字。

如果是这样,匹配普通整数的一种更简单的方法是通过一个集合从两个数字中获取唯一数字,然后计算它们之间的交点

a = 12345
b = 49085

#Convert both numbers into a set to get unique digits
set_a = set(str(a))
set_b = set(str(b))

#Get common digits between both numbers
common = [int(a) for a in set_a.intersection(set_b)]

print(common)

输出将为

[5, 4]

答案 1 :(得分:2)

您可以将每个数字转换为一组数字字符,以便可以使用设置交集以线性时间复杂度获得两个数字之间的公共数字:

list(map(int, set(str(b)).intersection(set(str(a)))))

这将返回:

[4, 5]

答案 2 :(得分:0)

在O(n)时间复杂度中

def find_chars_order_n(value1,value2):
  hsh = {}
  resp = set()     #Set is used to have unique Characters
  if str(value1) and str(value2):
    str1 = list(str(value1))
    str2 = list(str(value2))
  for elm in str2:
    hsh[elm] = elm
  for elm in str1:
    if hsh[elm]:
      resp.add(elm)
  # resp = str1 & str2 #using set intersection
  if resp:
    return list(resp))
  else:
    return None

if __name__ == "__main__":
  print(find_chars_order_n(1400,4011))