首页 > 解决方案 > 检查 int 数组的排列

问题描述

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} 不是唯一排列。我花了一些时间来编写这段代码,想知道它是否正确,是否有人可以解释一个更好的方法?此外,我被告知使用基本数组函数来执行此操作,因此没有哈希图、ArrayList 等。

标签: javaarrays

解决方案


此代码将不起作用。您要检查的只是列表具有相同的长度并且至少有一个共同的值(如前所述,return true将立即退出该函数)。因此,例如 [1,2,3] 和 [3,4,5] 将作为排列返回。

这里正确的方法是对两个数组进行排序,然后逐个位置比较它们。这不仅比在两个数组上循环更有效,而且还能正确处理重复值。例如 [1,2,2] 和 [1,1,2]不是彼此的排列。


推荐阅读