java 数组中的去重算法分析
下面是我写的一个关于数组去重的问题,nodup()方法,当然还有其他的一些数组的操作方法,这个去重的基本思路是:从第一项开始,遍历之后的项,如果遇到和第一项相同的项,就从这个重复项开始,其后的每一项向前移动一个位置。这就有一个问题,就是如果重复项太多,那么移动的次数就太多,效率就会降低。如果大家有好的方法,欢迎讨论。
class HighArray{ private int [] a; private int num; public HighArray(int size){ a = new int [size]; num = 0; } //------------------------------------ public void find(int key){ int i ; for(i = 0 ; i < num ; i++) if(a[i] == key) break; if(i == num) System.out.println("can"t find " + key); else System.out.println("find " + key); } //----------------------------------- public void insert(int value){ a[num] = value; num++; } public void delMax(){ int max; int i; max = a[0]; for(i = 1 ; i < num ; i++) if(a[i] > max) max = a[i]; System.out.println("max " + max); for(i=0; i < num ; i++) if(a[i] == max) break; for(int j = i ; j < num ; j++) a[j] = a[j+1]; num--; } //----------------------------------- public void noDup(){ int i; int j=0; for(i = 0 ; i < num ; i++) for(j = i + 1 ; j < num ; j++) if(a[j] == a[i]){ for(int k = j ; k < num ; k++) {a[k] = a[k+1];} num--; } } //----------------------------------- public void delete(int value){ int i; for(i = 0 ; i < num ; i++) if(a[i] == value) if(i != num){ for(int j = i ; j < num ; j++) a[j] = a[j+1]; num--; } else break; } //--------------------------------- public void display(){ for(int i = 0 ; i < num ; i++) System.out.print(a[i] + " "); System.out.print(" "); } public class HighArrayApp{ public static void main (String [] args){ HighArray ha = new HighArray(100); for(int i = 0 ; i < 80 ; i++){ int n = (int) (java.lang.Math.random()*79); ha.insert(n); } ha.display(); // ha.delMax(); // ha.find(26); // ha.delete(100); ha.noDup(); ha.display(); } }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。