可能的重复:
Java 数组,查找重复
我有这个数组
int[][] array = {{1,2,3,4}, {5,6,2,8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
如果这个数组中有重复的元素,我需要返回 false。例如索引 [0][1] 和 [1][2] 是相等的。我需要一种检测方法。如果解决方案只使用原语、数组和循环,那也很好。
可能的重复:
Java 数组,查找重复
我有这个数组
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()
如果不相等,则比您有重复
如果您只想使用原语,您可以像这样使用 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。
试试下面的代码
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));
}
}
我认为这是一个家庭作业问题,因此没有实际的实施指南。
仅当您有 2D 数组时,您才需要 2 个 for 循环。
遍历数组中的所有数字并比较它们是否相等。
如果找到任何重复项,则返回 false。
另一种方式
将此二维数组转换为一维数组
迭代并比较所有值
我的解决方案:
伪代码:
HashSet
Set
包含该元素。如果是这样,return false
立即。return true;
.这是另一种仅在您知道最大元素时才有效的方法
If
数组单元格为零,增加单元格 ( cell[element]++
)。If
数组单元格为 1, return false;
。return true;