java - 检查 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 等。
解决方案
此代码将不起作用。您要检查的只是列表具有相同的长度并且至少有一个共同的值(如前所述,return true
将立即退出该函数)。因此,例如 [1,2,3] 和 [3,4,5] 将作为排列返回。
这里正确的方法是对两个数组进行排序,然后逐个位置比较它们。这不仅比在两个数组上循环更有效,而且还能正确处理重复值。例如 [1,2,2] 和 [1,1,2]不是彼此的排列。
推荐阅读
- django - Django 在模板中显示外键引用
- delay - 确定端到端延迟
- jquery - 使用表格上的 CheckBox 更改值
- go - 使用 Martini 中间件,如果响应代码大于 399,则记录错误
- python - windows cmd没有在命令前面显示python virtualenvwrapper
- unix - 符号链接正在获取权限错误
- angular - 为 JSON 中的多条记录引发错误
- typescript - React Navigation v.5 中的 createStackNavigator 和 createBottomTabNavigator
- hashicorp-vault - 策略中的保险库模板路径导致权限被拒绝
- java - 如何在 Vaadin 的另一个类中使用路由器布局类的变量/方法?