📅  最后修改于: 2023-12-03 15:19:37.728000             🧑  作者: Mango
给定一个整数数组,找到其中两个数的最大公约数为 1 且乘积最大。
一个整数数组
两个数的乘积
输入: [2, 3, 4, 5]
输出: 15
2 和 3 的最大公约数为 1,乘积为 6
2 和 5 的最大公约数为 1,乘积为 10
3 和 5 的最大公约数为 1,乘积为 15
因此,返回 15
def find_max_product(nums):
max_product = -1
for i in range(len(nums)):
for j in range(i+1, len(nums)):
if gcd(nums[i], nums[j]) == 1:
product = nums[i] * nums[j]
max_product = max(max_product, product)
return max_product
def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b)
时间复杂度:$O(n^2)$,其中 n 是整数数组的长度。遍历整数数组需要 $O(n)$ 的时间,对于每一个数字组合,计算它们的最大公约数需要 $O(\log \min(a,b))$ 的时间,最坏情况下是 $O(\log n)$,因此总时间复杂度是 $O(n^2 \log n)$。
空间复杂度:$O(1)$,这里只用到常数级别的额外空间。