我有这个数组
int[][] array = {{1,2,3,4}, {5,6,2,8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
如果此数组中有重复的元素,我需要返回false。 例如,索引[0] [1]和[1] [2]是相等的。我需要一种方法来检测这个。如果解决方案仅使用基元,数组和循环,那也很好。
答案 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)
我认为这是一个功课问题,所以没有实际的实施指南。
只有2D阵列才需要2个for循环。
遍历数组中的所有数字并比较它们的相等性。
如果发现任何重复,则返回false。
另一种方式
将此2D数组转换为1D数组
迭代并比较所有值
答案 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)
伪代码:
HashSet
Set
是否包含该元素。如果是,立即return false
。return true;
。这是另一种只有在知道最大元素
的情况下才有效的方法If
数组单元格为零,递增单元格(cell[element]++
)。If
数组单元格为1,return false;
。return true;
答案 5 :(得分:0)
我的解决方案: