求使两数组元素频率分布一致的最小交换成本
问题描述
给定两个均包含N个正整数的数组A和B,计算使两数组元素频率分布一致的最小成本。数组间交换元素的成本为交换的两个值中的较小值。求所需的最小成本,若无法实现则返回-1。
测试用例
Test Case 1: Input: [4, 2, 1, 1] [4, 2, 2, 2] Output: 1 Test Case 2: Input: [1, 10, 10] [1, 20, 20] Output: 2
Test Case 1的最优操作说明:
交换第一个数组中的1和第二个数组中的2,成本为1,交换后数组变为[4, 2, 1, 2]和[4, 2, 2, 1],满足频率分布一致的要求。
前置判断条件
若任意数字在两个数组中的总出现次数为奇数,则无法平衡数组,此时返回-1。
我的错误思路
我之前的实现思路如下:
- 用两个字典分别统计数组A和B的元素频率,比如Test Case 1中,
mp_A = {4: 1, 2: 1, 1: 2},mp_B = {4: 1, 2: 3}。 - 计算每个数字的总出现次数,推导每个数组需要的目标次数,进而整理出待交换的数字及对应交换数量,比如Test Case 1中得到
arr = [[2, 1], [1, 1]],并按元素值排序。 - 采用双指针法,
i从数组头部开始,j从数组尾部开始,优先用较小的元素完成交换,比如假设数组是[[x, 2], [y, 1], [z, 1]]且x < y < z,就用一个x和z交换、另一个x和y交换,认为最小成本是2x。
但已有评论证明这个方法是错误的,我现在不知道该如何继续实现,也不清楚正确的解题思路是什么。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

