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

时间:2012-12-13 20:26:24

标签: java arrays loops

  

可能重复:
  Java Array, Finding Duplicates

我有这个数组

int[][] array = {{1,2,3,4}, {5,6,2,8}, {9, 10, 11, 12}, {13, 14, 15, 16}};

如果此数组中有重复的元素,我需要返回false。 例如,索引[0] [1]和[1] [2]是相等的。我需要一种方法来检测这个。如果解决方案仅使用基元,数组和循环,那也很好。

6 个答案:

答案 0 :(得分:5)

1:将所有值添加到List(例如ArrayList)
2:将all添加到集合(例如TreeSet)

list.size()set.size()

进行比较

如果不相等,则表示你有重复的

答案 1 :(得分:4)

如果您只想使用原语,可以像这样使用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;

如果无法添加值,则set.add方法返回false,因为它是重复的。

答案 2 :(得分:1)

我认为这是一个功课问题,所以没有实际的实施指南。

  1. 只有2D阵列才需要2个for循环。

  2. 遍历数组中的所有数字并比较它们的相等性。

  3. 如果发现任何重复,则返回false。

  4. 另一种方式

    1. 将此2D数组转换为1D数组

    2. 迭代并比较所有值

答案 3 :(得分:1)

尝试以下代码

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));
    }

}

答案 4 :(得分:0)

伪代码:

  1. 循环显示所有值,将其添加到HashSet
  2. 在每次迭代时,检查Set是否包含该元素。如果是,立即return false
  3. return true;

  4. 这是另一种只有在知道最大元素

    的情况下才有效的方法
    1. 创建一个新数组,其中数组中的每个单元格都由元素
    2. 编制索引
    3. If数组单元格为零,递增单元格(cell[element]++)。
    4. If数组单元格为1,return false;
    5. return true;

答案 5 :(得分:0)

我的解决方案:

  1. 二维数组元素到列表
  2. 对列表进行排序
  3. 如果我索引列表项== i + 1
  4. ,请检入一个for循环