我想最小化此Python程序的运行时间

时间:2018-10-21 14:55:15

标签: python-3.x

我想最小化运行时间的代码,它经过一个数字数组,并找到当前max_product和下一个产品之间的最大值。

def max_pairwise_product(numbers):
    n = len(numbers)
    max_product = 0
    for i in range(n):
        for j in range(i+1,n):
            max_product = max(max_product,numbers[i]*numbers[j])
            return max_product

if __name__ == '__main__':
    input_n = int(input())
    input_numbers = [int(x) for x in input().split()]
    print(max_pairwise_product(input_numbers))

2 个答案:

答案 0 :(得分:0)

您的代码正在尝试查找数字数组中任何两个不相同元素的最大乘积。您当前正在通过计算每种产品来进行此操作。该算法具有n²/ 2 个计算和比较,而您实际要做的事情要少得多:

从基本数学上我们知道,原始数组中的两个最大数字将具有最大乘积。因此,您所需要做的就是:

  • 找到数组中的两个最大整数
  • 乘以它们。

您可以通过对原始数组进行排序或仅浏览数组来找到两个最大的元素(听起来有点棘手,因为这两个元素可能具有相同的值但可能不是相同元素

作为旁注:将来,请格式化您的帖子,以使读者可以真正理解您的代码的作用而无需经历麻烦。

答案 1 :(得分:0)

对数字进行排序并将最后两个元素相乘会比O(n ^ 2)更好的时间复杂度。

排序-O(登录) 乘法-O(1)

def max_pairwise_product(numbers):
    n = len(numbers)
    max_product = 0
    numbers.sort()
    if ((numbers[n-1] >0) and (numbers[n-2] >0)):
        max_product = numbers[n-1]*numbers[n-2]
    return max_product

if __name__ == '__main__':
    input_n = int(input())
    input_numbers = [int(x) for x in input().split()]
    print(max_pairwise_product(input_numbers))