
// Loeschen aller Feldelemente, die mehrfach enthalten sind
// Beim Loeschen eines Feldelements müssen alle nachfolgenden 
// Elemente um eine Position nach links verschoben werden.


class RemoveDuplicates
{
   // durchsuchen des Bereichs start .. end nach key
   public static int suchen(int[] a, int start, int end, int key)
   {
      for(int i = start; i <= end; i++)
         if(a[i] == key)
            return i;
      return -1;         
   }

   // loeschen des Elements mit dem Index pos
   public static int loeschen(int[] a, int size, int pos)
   {
      // nur wenn pos == size-1 ist, muessen wir nichts verschieben
      for(int i = pos; i < size-1; i++)
         a[i] = a[i+1];
      return size-1;         
   }

   // loeschen aller Eintrage, die mehrfach enthalten sind
   public static int duplikateEntfernen(int[] a, int size)
   {
      int i = 0, key, index;

      // wenn i == size geworden ist, sind wir fertig
      while(i < size)
      {
         // Feldelement mit Index i wird zum Suchschluessel
         key = a[i];

         // suche und entferne alle Duplikate des Schluessels
         // beginnend beim Index i+1
         // wir sind fertig, wenn suchen -1 zurueckliefert
         while((index = suchen(a, i+1, size-1, key)) != -1)
            size = loeschen(a, size, index);

         i++;
      }
      return size;         
   }

   public static void main(String[] args)
   {
      int size;
      int[] intFeld = new int[10];
   
      // intFeld mit Pseudo-Zufallszahlen
      // im Bereich 0 .. 10 initialisieren
      for(int i=0; i<intFeld.length; i++)
         intFeld[i] = (int)(10*Math.random()); 

      System.out.print("Originalzustand:   ");
      for(int i=0; i<intFeld.length; i++)
         System.out.print(intFeld[i] + " ");
      System.out.println();

      size = duplikateEntfernen(intFeld, intFeld.length);

      System.out.print("nach dem Loeschen: ");
      for(int i=0; i<size; i++)
         System.out.print(intFeld[i] + " ");
      System.out.println();
   }
}

