我编写了一个运行时间为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)
答案 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))