给定 2 个长度为均为 n 的整数数组 nums1 和 nums2 ,每次操作可以交换数组 nums2 中任意 2 个元素,其代价为两个下标的和。
目标是对于所有的下标 i 。0<=i<n ,n 为数组的长度,都满足nums1[i]=nums2[i]。
返回满足目标的最小代价和,如果达不成目标,返回 −1 。
给定两个长度为 n 的整数数组 nums1 和 nums2,可以通过交换数组 nums2 中任意两个元素来使得所有下标 i 满足 nums1[i]=nums2[i],每次交换的代价为两个被交换元素下标的和。目标是计算使两个数组在对应位置相等的最小代价和,如果无法通过交换使两个数组相等,则返回 −1。输入格式为:第一行输入整数 n,表示数组的长度;第二行和第三行分别输入长度为 n 的数组 nums1 和 nums2。输出格式为满足要求的最小代价和,或无法满足时输出 −1。
记需要交换的总对数为 swapCount
,其中要交换的数的众数为 modeValue
,众数个数为 modeCount
,我们分两种情况讨论:
modeCount <= swapCount / 2
,即众数个数为总数的一半:
swapCount
为偶数,那么可以直接内部两两交换即可。swapCount
为奇数,记为 2*k + 1
,那么最极端的情况也是 k
个 a
,k
个 b
,1
个 c
,这样才能拼成一个奇数且满足众数个数不超过总数一半。