删除重复JAVA数组的最佳实现

时间:2014-05-14 15:49:20

标签: java arrays algorithm sorting

找到这个方法来制作这个方法:

int[] withoutDuplicates(int[] a){
int n = a.length;
   if (n < 2) {
        return a; 
    }
    for (int i = 0; i < n-1; i++) { 
         for (int j = i+1; j < n; j++) {
               if (a[j] == a[i]) {
                 --n;
                 System.arraycopy(a, j+1, a, j, n-j);
                --j; 
             }//end if
        } //end for
     }//end for

     int[] aa = new int[n]; 
     System.arraycopy(a, 0, aa, 0, n); 
     return aa;

}//end method

我不明白它为什么使用长度为n的数组。不应该是大小为n减去重复次数的删除吗? 这是实施该方法的最佳方式吗?或者我可以使用任何java资源吗?

2 个答案:

答案 0 :(得分:4)

我天生就懒惰。我会这样做:

- 编辑 -

private int[] withoutDuplicates(int[] a){
    Set<Integer> set = new LinkedHashSet<Integer>();
    for (int x : a) {
        set.add(x);
    }
    int[] newArray = new int[set.size()];
    int ii = 0;
    for (Integer x : set) {
        newArray[ii++] = x;
    }
    return newArray;
}

答案 1 :(得分:0)

这是一种用于删除重复项并维护相对顺序的算法。 时间:O(n) 空格:O(n)

public static void dupCheck(int [] a){
        int j=0;
        HashMap<Integer,Boolean> map = new HashMap<Integer,Boolean>();
        int [] b = new int [a.length];
        for(int i=0;i<a.length;i++){
            if(!map.containsKey(a[i])){
                map.put(a[i],true);
                b[j++]=a[i];
            }
        }
        for(int i=0;i<j;i++)
            System.out.print(b[i]+" ");
    }