📅  最后修改于: 2023-12-03 14:49:52.608000             🧑  作者: Mango
有两个长度相等的正整数数组A和B,现在需要交换A和B中的一个元素,使得A数组中的最大数乘以B数组中的最小数最小。请你编写一个函数来实现这个任务,并返回最小乘积。
首先,我们找到A数组中的最大数和B数组中的最小数。那么,交换A数组中的最大数和B数组中的最小数肯定是最优解。
接着,我们再次找到A数组中的最大数和B数组中的最小数,比较交换前后的最大数乘最小数的结果,取最小值即可。
def min_product(nums1: List[int], nums2: List[int]) -> int:
max1, min2 = max(nums1), min(nums2)
max1_index, min2_index = nums1.index(max1), nums2.index(min2)
res = max1 * min2
if max1 <= min2:
return res
max2, min1 = max(nums2), min(nums1)
max2_index, min1_index = nums2.index(max2), nums1.index(min1)
res = min(res, max2 * min1)
return res
该函数的时间复杂度为$ O(n)$,其中$n$为数组的长度。由于我们只进行了一次遍历,因此空间复杂度为$O(1)$。