public static boolean isPermutation(int[] listA, int[] listB)
{
if (listA == null || listB == null)
throw new IllegalArgumentException("Violation of precondition: " + "isPermutation. neither parameter may equal null.");
if (listA.length == listB.length)
{
for (int i = 0; i < listA.length; i++)
{
for (int j = i+1; j < listA.length; j++)
{
if (listA[i] == listB[j])
return true;
}
}
}
return false;
}
我正在编写一个函数来检查两个数组列表之间的排列。例如,排列是 {2,2,1},其中唯一排列可以是 {2,1,2} 、{1,2,2} 和 {2,2,1}。 {2,2} 不是唯一排列。我花了一些时间编写这段代码,想知道它是否正确以及是否有人可以解释更好的方法?另外,我被告知要使用基本数组函数来执行此操作,因此不需要 HashMap 、ArrayList 等。
最佳答案
此代码不起作用。您只需检查列表是否具有相同的长度并且至少有一个共同值(如前所述,return true
将立即退出该函数)。所以例如[1,2,3] 和 [3,4,5] 将作为排列返回。
这里正确的方法是对两个数组进行排序,然后逐位置比较它们。这不仅比循环两个数组更有效,而且还可以正确处理重复值。例如。 [1,2,2] 和 [1,1,2] 不是彼此的排列。
关于java - 检查 int 数组的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53234241/