Java中重新排列数组,使得所有相等索引的对应元素之和相同
原文中文,约3500字,阅读约需9分钟。发表于: 。给定两个长度为N的数组A[]和B[]。然后你的任务是重新排列两个数组的元素,使得所有 i (1 <= i <= N) 的总和(A i + B i )相同。如果不可能进行这样的安排,则输出-1。例子:输入: N = 3,A[] = {1, 2, 3},B[] = {1, 2, 3}输出: A[] = {3, 1, 2},B[] = {1, 3, 2}解释:重新排列后的 A[] 和 B[]...
给定两个长度为N的数组A[]和B[],要求重新排列两个数组的元素,使得所有i的总和(Ai+Bi)相同。如果不可能进行这样的安排,则输出-1。算法思路是使用HashMap来检查重新排列的可能性和进行最终重排。首先计算A[]和B[]的总和,如果不能被N整除,则返回-1。然后计算平均值Avg,将B[]中所有元素的频率存储在HashMap中。迭代A[]的所有元素,在HashMap中搜索(Avg-A),如果找到,则更新B[]中对应的元素,并将该元素的频率减1。最后打印重新排列后的A[]和B[],如果无法安排,则输出-1。时间复杂度为O(N),空间复杂度为O(N)。