📅  最后修改于: 2023-12-03 15:11:40.417000             🧑  作者: Mango
给定两个长度为 n 的正整数数组 nums1 和 nums2,以及一个整数 k。定义一组值 (i,j) 满足 nums1[i]*nums2[j] 最大,同时满足 i+j ≤ k 。找到所有满足条件的元素对 (i,j),并计算这些元素对的最小乘积总和。
输入:
nums1 = [1,7,11], nums2 = [2,4,6], k = 3
输出:
10
解释:
我们得到的元素对为
(1,1) : 1 * 4 = 4
(2,1) : 7 * 4 = 28
(1,2) : 1 * 6 = 6
因此,最小乘积总和为 4 + 6 = 10。
输入:
nums1 = [1,1,2], nums2 = [1,2,3], k = 2
输出:
1
解释:
我们得到的元素对为
(1,1) : 1 * 1 = 1
因此,最小乘积总和为 1。
def minProductSum(nums1: List[int], nums2: List[int], k: int) -> int:
n = len(nums1)
nums1.sort()
nums2.sort()
ans = []
i, j = n - 1, n - 1
while len(ans) < k:
mul1, mul2 = nums1[i] * nums2[j], nums1[i - 1] * nums2[j - 1]
if mul1 > mul2:
ans.append(mul1)
j -= 1
else:
ans.append(mul2)
i -= 1
ans.sort()
return sum(ans[:k])