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();
}
}声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
