Java 检查二维数组中的行和列是否重复
如何检查列和行的重复项,并根据是否存在重复项返回true或false。比如说Java 检查二维数组中的行和列是否重复,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,如何检查列和行的重复项,并根据是否存在重复项返回true或false。比如说 123 3 1 2 2 3 1 将返回true,因为没有重复项,但是 12 3 2 3 21 将返回false,因为第2{2,2,1}列中存在重复项 如何检查行中是否有重复项,然后检查列中是否有重复项 到目前为止,我只有以下几点: public static boolean hasDuplicates(int [][] inArray) { for (int row = 0; row < inArray.l
123
3 1 2
2 3 1
将返回true,因为没有重复项,但是
12
3 2 3
21
将返回false,因为第2{2,2,1}列中存在重复项
如何检查行中是否有重复项,然后检查列中是否有重复项
到目前为止,我只有以下几点:
public static boolean hasDuplicates(int [][] inArray)
{
for (int row = 0; row < inArray.length; row++)
{
int rowCheck = inArray[row][inArray.length];
for (int col = 0; col < inArray[row].length; col++)
{
}
}
return false;
}
公共静态布尔值hasDuplicates(int[]inArray)
{
对于(int row=0;row
因此,我需要接收一个数组,并检查列或行之间是否存在任何重复项。有什么建议吗?谢谢大家!
注意:这不能通过外部方法来完成对于行,请尝试以下步骤:
boolean dup = false;
for (int k = 0; k < inArray[0].length){ //loop through columns
for (i = 0; i < inArray.length-1; i++) {
for (int j = i; j < inArray.length; j++){
if (inArray[k][i] == inArray[k][j]){
dup = true;
break;
}
}
}
}
boolean dup=false;
对于(int k=0;k
因此,您从第一个元素开始,然后从元素2扫描到n(即列数)。如果找到匹配项,则将布尔值设置为true。如果不匹配,则i递增,内部for循环从元素3扫描到n
对列执行类似的步骤,就完成了 检查行中的每个值。对于每个值,检查并查看该值之后的任何值是否相同。如果值相同,则返回true(您发现了一个重复项)。如果所有值都不相同,则增加索引并对下一行执行相同的操作。每一行最多需要n(n+1)/2次比较,这并不美妙。因此,如果n是列数,m是行数,那么这将运行,最坏的情况是m(n(n+1)/2)次 下面是一个示例,说明了它对行的工作方式:
/**
* Return flag indicating if there are duplicates in the rows of the 2D array
*
* @return true if a row has duplicates, else false
*/
public boolean hasDuplicatesInRows(int[][] inArray)
{
for (int row = 0; row < inArray.length; row++)
{
for (int col = 0; col < inArray[row].length; col++)
{
int num = inArray[row][col];
for (int otherCol = col + 1; otherCol < inArray.length; otherCol++)
{
if (num == inArray[row][otherCol])
{
return true;
}
}
}
}
return false;
}
/**
*返回标志,指示二维数组的行中是否存在重复项
*
*@如果一行有重复项,则返回true,否则返回false
*/
公共布尔值hasDuplicatesInRows(int[][]inArray)
{
对于(int row=0;row
这也很容易扩展到do列。不过我会让你去做的
如果使用有效的排序方法并对所有行进行排序,则只需沿着这一行往下看是否有任何值等于后面的值。如果是,则返回true,否则返回false。如果您有一个大的数据集,这将更加有效。假设您创建了一个在一维数组上运行的方法。您可以将问题分解为将二维数组中的数字条提取到一维数组中。它的签名可能看起来像
布尔containsDupes(int[]strip){…}
该方法中有两种方法可以使问题更容易解决。一种方法是对该数组进行排序,使重复项彼此相邻。另一种方法是使用每个值填充哈希集,并将该集的大小与数组的长度进行比较。实现此任务的更简洁的方法是将所有值添加到一个集合中,然后使用番石榴将集合中唯一元素的数量与原始行大小进行比较
public static boolean hasDuplicates(int [][] inArray) {
for (int row = 0; row < inArray.length; row++) {
int curRow = inArray[row];
Set set = Sets.newHashSet(Arrays.asList(curRow));
if (set.size() < curRow.length) {
return true;
}
}
return false;
}
公共静态布尔值hasDuplicates(int[]inArray){
对于(int row=0;row
在您的第一个示例中,3-2-3怎么不是“重复的”?有点不清楚你在问什么。@BrianRoach,我道歉!第三行应该是2-3-1,已编辑!你可以在这个(完全相同的)问题中找到你的答案:对于(i=0;i也是对于(i=0;i
,然后下一个是对于(int j=i;j
?谢谢你的帮助。我本来在里面有个“n”,因为我开始让我的答案更一般化。我将把它加入我的答案中。这是针对一个不允许我使用集合或列表的程序。对不起,我应该在上面提到。对不起,我应该在上面提到我不能使用任何外部方法。谢谢你的帮助,希望我能走这条路。你有没有什么方法可以在没有任何提示的情况下做这件事。我理解这个概念,但我不知道如何实现it@user3335070我修正了我的答案,不使用集合。它与以前几乎相同,但它会针对行中的每个值与其他值进行检查。我不相信这是最有效的,但它确实有效,而且很简单。非常感谢你,我无法表达我的感激之情。。我从上午11点就开始做这件事了,我一直处于这样的困境。非常感谢。要获取列,我需要将它们切换,以便第一个for循环是for(int col=0;col然后是内部的行?然后用一行代替另一行,谢谢。你真的救了我一个通宵!