java - 检查 int 数组的排列

标签 java arrays

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/

相关文章:

java - 如何摆脱以下程序中的 NumberFormatException?

c++ - 如何extern一个全局二维数组?

java - 将数组列表的数组列表转换为数组?

PHP 对复杂数组进行排序

java - MiniMaxSum 通过了第一个测试用例,但因值较大而失败 (hackerrank)

php - 替换数组回调

arrays - 使用 each_with_slice 拆分数组但在结果数组中保留特定值(一个衬里)

java - JestClient 建议不要使用 java.lang.NoSuchMethodError

java - 在 Eclipse 中自动完成跳过 getter 和 setter

java - Myclass.class.getProtectionDomain().getCodeSource() 返回空路径