我对编程非常陌生,所以请放轻松我:)
如何让以下python代码输出更快 -
n = int(input())
a = [int(x) for x in input().split()]
assert(len(a) == n)
result = 0
for i in range(0, n):
for j in range(i+1, n):
if a[i]*a[j] > result:
result = a[i]*a[j]
print(result)
有哪些选项可以最大限度地提高速度?
答案 0 :(得分:2)
你要做的就是找到产品最大的两个不同元素。当两个数字最大时会发生这种情况。所以你基本上在阵列中找到了两个最大的数字。这可以在O(n)
中完成。
如何做到这一点的一个例子。找到最大的数字和它的位置。保存,删除它并找到结果的最大值(这将是第二大)。现在将两者相乘。
答案 1 :(得分:0)
您正在尝试计算列表中不同整数的最大乘积。 每对计算产品的时间复杂度为O(N ^ 2)。
您可以通过对列表进行排序将其减少到O(N log(N))。
a = sorted(a)
ans = max(a[0] * a[1], a[-2] * a[-1])
您可以进一步将其改进为线性时间,但我会让您弄明白。
答案 2 :(得分:0)
我看到,Stepik.org课程和#34;最大成对产品":
尝试以下操作,而不是级联的for循环:
n1 = max(a)
a.remove(n1)
result = n1*max(a)
基本上保存变量中的最大值,将其从序列中删除,并将其与序列的当前最大值(原始序列中的第二大值)相乘。
答案 3 :(得分:0)
我的解决方案将使用sorted和set,因为此算法也适用于重复项目。
x, y = sorted(set(nums))[-2:]
print(x * y)
答案 4 :(得分:0)
我想出了这个O(n)解决方案:
def maxPairwise(l):
if len(l) == 2:
return l[0]*l[1]
elif len(l) == 1:
return l[0]
else:
max1 = 0
max2 = 0
for i in l:
if i > max1:
max1 = i
if i > max2 and i != max1:
max2 = i
return max1 * max2