📅  最后修改于: 2023-12-03 15:12:38.201000             🧑  作者: Mango
给定一个数组 arr
和一个整数 k
,你需要找到两个不同的元素 arr[i]
和 arr[j]
,使得 $i≠j$ 且 $arr[i]+arr[j]=k$。如果有多个组合,则输出相乘之后的最大值。
def max_product(arr: List[int], k: int) -> int:
pass
输出一个整数,表示找到的二元组相乘之后的最大值。如果无法找到,则返回 -1
。
assert max_product([1, 3, 5, 4, 2], 5) == 15
assert max_product([5, 8, 10, 13], 10) == -1
assert max_product([12, 7, 4, 32, 9, 10], 36) == 352
使用一个哈希表 $m$,遍历数组 $arr$,对于数组中的每个元素 $x$,判断 $k-x$ 是否存在于哈希表中,如果存在,则取出哈希表中对应的值与 $x$ 相乘,如果更大则更新结果。如果不存在,则将 $x$ 插入到哈希表中。
对于一个长度为 $n$ 的数组,我们需要遍历一次数组,对每个元素在哈希表中查找或插入操作为 $O(1)$,所以总的时间复杂度为 $O(n)$。
由于哈希表中存储了最多 $n$ 个元素,所以空间复杂度为 $O(n)$。
from typing import List
def max_product(arr: List[int], k: int) -> int:
if len(arr) < 2:
return -1
m = {}
res = -1
for x in arr:
if k - x in m:
prod = m[k-x] * x
if prod > res:
res = prod
m[x] = x
return res