2015-10-20 68 views
0

搜索重复我有2维数组,如:在2维数组

{2 , 6 , 46, 8 , 7 , 25, 64 , 9 , 10}, 
{6 , 10, 50, 12, 11, 29, 68 , 13, 14}, 
{46, 50, 90, 52, 51, 69, 108, 53, 54} 

我怎样才能找到重复的元素,如'6', '46' and '50'

我的代码查找连续的重复:

for (int i = 0; i < a2.length; i++) { 
     for (int j = 0; j < a2[i].length; j++) { 
      cursor = a2[i][j]; 

      if(j + 1 < a2[i].length){ 
       if(cursor == a2[i][j + 1]){ 
        System.out.println(cursor + "has duplicate in this array"); 
       } 
      } 
     } 
    } 
+0

如果要删除重复的元素,把所有的数字放在一个Set中。 – Rehman

+1

是否要打印重复元素或查找数组是否包含重复项 –

+0

'j'的范围不是0到'a.length'。它应该是0到'a [i] .length'。此外,这段代码没有找到通用的重复项。它只查看连续的重复项。这是你的意图吗? – lurker

回答

0

通过迭代所有元素,并将其保存在临时设置。
当您遇到重复时,该列表将包含它。

import java.util.HashSet; 
import java.util.HashSet; 

public class HelloWorld 
{ 
    public static void main(String[] args) 
    { 
    int[][] arr = { 
     {2 , 6 , 46, 8 , 7 , 25, 64 , 9 , 10}, 
     {6 , 10, 50, 12, 11, 29, 68 , 13, 14}, 
     {46, 50, 90, 52, 51, 69, 108, 53, 54} 
    }; 

    HashSet<Integer> elements = new HashSet<>(); 
    HashSet<Integer> duplicates = new HashSet<>(); 
    for (int i = 0; i < arr.length; i++) { 
     for (int j = 0; j < arr[i].length; j++) { 
      if(elements.contains(arr[i][j])) { 
       duplicates.add(arr[i][j]); 
      } 
      elements.add(arr[i][j]); 
     } 
    } 

    System.out.println(duplicates.toString()); 
    } 
} 

输出:

[50,6,10,46]

+0

有没有没有使用“哈希集”的解决方案? – OCY

+0

我必须问为什么? – Cyrbil

+1

@OCY - 是的。你为什么不试着为自己找出答案?你会学到更多的方式。 –

0

尝试验证码 -

import java.util.Arrays; 
import java.util.List; 

public class ArrayTest { 

    public static void main(String[] args) { 

     Integer[][] myarray = new Integer[][]{ 
        { 10, 20, 30, 40 }, 
        { 50, 77, 60, 70 }, 
        { 33, 22, 88, 99 }, 
        { 21, 66, 65, 21 } 
       }; 
     int i,j; 
     for(i=0;i<myarray.length;i++) 
     { 
      for(j=0;j<myarray.length;j++) 
      { 
       int temp= myarray[i][j]; 
       myarray[i][j]=0; 
       List<Integer> rowvalues = Arrays.asList(Arrays.asList(myarray).get(i)); 
       Boolean b=rowvalues.contains(temp) ; 
       if(b==true) 
       { 
        System.out.println("duplicate at ["+i+"]["+j+"] is: "+temp); 
       } 
       myarray[i][j]=temp; 
      } 
     } 




    } 

} 
+0

这并没有找到所有重复项,因为它只搜索当前的子数组。 你也可以重构'Arrays.asList(Arrays.asList(myarray).get(i))'只做一次转换,而不是每一次循环。 – Cyrbil