Java'da dizi içerisinde saklamakta olduğumuz tamsayılardan mükerrer olanları silmek istediğimiz bir örnek yapalım. Ancak dizilerde (vektörler ve matrisler) dizi boyutları değiştirilemediği için iki seçeneğimiz var. Birincisi temizlenmiş diziyi yeni bir diziye kopyalamak, ikincisi ise mükerrer olan kayıtları 0 yapmak. Biz bu örnekte ikinci seçeneği takip edeceğiz.
Peki tekrar eden verileri nasıl tespit edeceğiz? Akla gelen ilk iki yol:
1. Dizi elemanlarını sıralamak ve yan yana gelen elemanlardan aynı olanları 0 yapmak. Peki ya aynı elemandan 3 tane varsa? Bu sefer yan yana gelen 3 elemanı karşılaştırmak gerek. 4 olursa? 5 de olabilir.. Bu yüzden bu algoritmayı seçmek hatalı olur.
2. Her bir dizi elemanının kaç kez geçtiğini takip ettiğimiz bir frekans vektörü oluşturmak. Dizi elamanlarımız 1 ile 9 arasındaki sayılardan oluşuyorsa 9 eleman saklayan bir frekans dizisi tanımlayalım. Sonra da birden fazla kez tekrar eden dizi elemanlarını 0 ile değiştirelim.
İkinci algoritma üzerinden kodlar:
//elemanlarını elimizle seçtiğimiz bir dizi üretelim
int[] dizi = {5, 6, 2, 1, 9, 2, 4, 2, 4, 6, 9, 8, 2, 6};
int[] frekanslar=new int[9];
for (int i=0; i<dizi.length; i++)
{
frekanslar[dizi[i]-1]++;
if (frekanslar[dizi[i]-1] > 1)
dizi[i]=0;
}
for (int i=0; i<dizi.length; i++)
{
if (dizi[i] != 0)
System.out.print(dizi[i]+" ");
}
Çıktı:
5 6 2 1 9 4 8