Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在数组的数组中查找重复元素?_Java_Arrays_Loops - Fatal编程技术网

Java 如何在数组的数组中查找重复元素?

Java 如何在数组的数组中查找重复元素?,java,arrays,loops,Java,Arrays,Loops,可能重复: 我有这个数组 int[][] array = {{1,2,3,4}, {5,6,2,8}, {9, 10, 11, 12}, {13, 14, 15, 16}}; 如果这个数组中有重复的元素,我需要返回false。 例如,索引[0][1]和[1][2]相等。我需要一种方法来检测这个。另外,如果解决方案只使用原语、数组和循环也很好。1:将所有值添加到列表(例如ArrayList) 2:将所有内容添加到集合(例如TreeSet) 比较list.size()和set.size() 如果

可能重复:

我有这个数组

int[][] array = {{1,2,3,4}, {5,6,2,8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
如果这个数组中有重复的元素,我需要返回false。
例如,索引[0][1]和[1][2]相等。我需要一种方法来检测这个。另外,如果解决方案只使用原语、数组和循环也很好。

1:将所有值添加到列表(例如ArrayList)
2:将所有内容添加到集合(例如TreeSet)

比较
list.size()
set.size()


如果不相等,那么就有两个副本

我认为这是一个家庭作业问题,因此没有实际的实施指南

  • 只有在使用2D阵列时,才需要2个for循环

  • 遍历数组中的所有数字,并比较它们是否相等

  • 如果发现任何重复项,则返回false

  • 另一种方式

  • 将此二维阵列转换为一维阵列

  • 迭代并比较所有值

  • 伪代码:

  • 循环遍历所有值,将它们添加到
    哈希集
  • 在每次迭代中,检查
    集合
    是否包含该元素。如果是,则立即返回false
  • 返回true

  • 这里有另一种方法,只有知道最大元素时才有效

  • 创建一个新数组,其中数组中的每个单元格都由元素索引
  • 如果数组单元格为零,则递增单元格(
    单元格[元素]++
  • 如果
    数组单元格为1,
    返回false
  • 返回true

  • 如果您只想使用原语,可以像这样使用TIntHashSet

    TIntHashSet set = new TintHashSet(); // like Set<Integer> but with primitives
    for(int[] arr: array) for(int i: arr) if(!set.add(i)) return false;
    return true;
    
    TIntHashSet=new TIntHashSet();//与集合相似,但具有基本体
    for(int[]arr:array)for(int i:arr)if(!set.add(i))返回false;
    返回true;
    
    如果无法添加该值,则set.add方法返回false,因为它是重复的。

    我的解决方案:

  • 将二维数组元素添加到列表中
  • 对列表排序
  • 如果i索引列表项==i+1,则签入一个for循环
  • 试试下面的代码

    package com.rais.duplicates;
    
    import java.util.HashSet;
    import java.util.Set;
    
    /**
     * @author Rais.Alam
     * @date Dec 14, 2012
     */
    public class DetectDuplicateClient
    {
    
        public static boolean isDuplicate(int[][] array)
        {
            boolean retVal = false;
            if (array != null && array.length > 0)
            {
                Set<Integer> temp = new HashSet<Integer>();
    
                outer:
                for (int[] innerArray : array)
                {
                    for (int value : innerArray)
                    {
                        if(!temp.add(value))
                        {
                            retVal = true;
                            break outer;
                        }
    
                    }
                }
            }
            return retVal;
        }
    
        public static void main(String[] args)
        {
    
            int[][] array =  { { 1, 2, 3, 4 }, { 5, 6, 2, 8 }, { 9, 10, 11, 12 },{ 13, 14, 15, 16 } };
    
            System.out.println(isDuplicate(array));
        }
    
    }
    
    package com.rais.duplicates;
    导入java.util.HashSet;
    导入java.util.Set;
    /**
    *@author Rais.Alam
    *@日期2012年12月14日
    */
    公共类DetectDuplicateClient
    {
    公共静态布尔isDuplicate(int[][]数组)
    {
    布尔retVal=false;
    if(array!=null&&array.length>0)
    {
    Set temp=new HashSet();
    外部:
    for(int[]innerArray:array)
    {
    for(int值:innerArray)
    {
    如果(!温度添加(值))
    {
    retVal=true;
    打破外部;
    }
    }
    }
    }
    返回返回;
    }
    公共静态void main(字符串[]args)
    {
    int[][]数组={{1,2,3,4},{5,6,2,8},{9,10,11,12},{13,14,15,16};
    System.out.println(isDuplicate(array));
    }
    }
    
    所以你有64*64次迭代??注意到了吗?@Natix更像是通往hell@Natix还有汤姆斯,伙计们不会取笑他,帮助他,而不是阻止他解决问题。比我快了几秒钟。作为注释,为了避免添加所有内容,您可以执行一个循环,将列表中的元素添加到集合中,并在集合中返回
    true
    (意思是“有重复项”),如果
    theSet.add()
    返回false。@AlexWien,这是解决问题的好方法。但是看看他的代码,你真的认为他能做到这一点吗?为什么你甚至需要步骤1,这个解决方案没有利用早期的优势exiting@Gambset.add()方法将是我投票赞成的答案。它返回false的第一个实例可能是停止条件。根本不需要列表。我只需将它们添加到集合中,然后跳过列表即可这是行不通的。您需要选择第一个索引并将其与其他索引进行比较。然后选择第二个,然后再将它与其他的进行比较,依此类推。。。这对2个循环根本不起作用。@user1253722我更新了答案这对你有帮助还是不让我知道?是原始的吗?我有正确的链接吗?很好,但是使用外部库的解决方案不是可行的,除了一百万个条目。TInHashSet不是原语,它包装的int[]也不是,但它避免像HashSet那样创建整数或条目对象。我同意应该首先考虑普通的
    哈希集
    。谢谢你的解决方案。我对它做了一点修改,以避免使用外部库。我改变了:
    TIntHashSet=new TIntHashSet()收件人:
    Set=newhashset()