📌  相关文章
📜  给定数组的成对元素的最小乘积之和(1)

📅  最后修改于: 2023-12-03 15:27:35.522000             🧑  作者: Mango

给定数组的成对元素的最小乘积之和

简介

给定两个长度相等的数组nums1nums2,现在可以对它们进行任意次数的交换操作,交换操作的定义是选择两个下标ij并交换nums2[i]nums2[j]。最终得到的数组需要满足nums1[i]*nums2[i]的和最小。

算法思路

首先需要对nums1进行排序,然后对nums2的每个数找到与其对应的nums1中的最小数并记录下来。最后将nums1nums2中的数逐个相乘求和即可。

代码实现
def minProductSum(nums1, nums2):
    nums1.sort()
    nums2 = [nums2[i] for i in sorted(range(len(nums2)), key=lambda k: nums2[k])]
    return sum([nums1[i]*nums2[i] for i in range(len(nums1))])
时间复杂度

时间复杂度为$O(nlogn)$,其中$n$为数组长度。排序花费$O(nlogn)$的时间,遍历数组花费$O(n)$的时间。

空间复杂度

空间复杂度为$O(n)$,需要额外的数组存储排序后的nums2

总结

该算法的思路较为简单,排序后对应相乘即可。但在实现中需要注意细节,如如何将nums2排序后的下标对应到nums1