0

可能的重复:
Java 数组,查找重复

我有这个数组

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

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

4

6 回答 6

5

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

比较list.size()_set.size()

如果不相等,则比您有重复

于 2012-12-13T20:31:15.347 回答
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。

于 2012-12-13T20:42:21.003 回答
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));
    }

}
于 2012-12-14T06:38:44.203 回答
1

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

  1. 仅当您有 2D 数组时,您才需要 2 个 for 循环。

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

  3. 如果找到任何重复项,则返回 false。

另一种方式

  1. 将此二维数组转换为一维数组

  2. 迭代并比较所有值

于 2012-12-13T20:34:31.593 回答
0

我的解决方案:

  1. 二维数组元素到列表
  2. 对列表进行排序
  3. 如果我索引列表项 == i + 1,则签入一个 for 循环
于 2012-12-13T21:17:33.197 回答
0

伪代码:

  1. 循环遍历所有值,将它们添加到HashSet
  2. 在每次迭代中,检查 是否Set包含该元素。如果是这样,return false立即。
  3. return true;.

这是另一种仅在您知道最大元素时才有效的方法

  1. 创建一个新数组,其中数组中的每个单元格都由元素索引
  2. If数组单元格为零,增加单元格 ( cell[element]++)。
  3. If数组单元格为 1, return false;
  4. return true;
于 2012-12-13T20:42:09.717 回答