Array auf doppelte Elemente überprüfen

kilopack15

Aktives Mitglied
Hallo Leute!
ich soll innerhalb eines Arrays prüfen, ob Elemente doppelt vorkommen. Wenn ja soll die Methode true zurückgeben. Wenn nein, ... ihr könnt es euch vorstellen 😉
Hier meine Lösung: Wäre schön wenn ihr mal drüberschaut und korrigiert, wenn ich was falsch gemacht habe:

Java:
    // Wenn array mind . eine Zahl doppelt enthalt -> true ; andernfalls false .
        public static boolean hasDoppelte( int [] array ){
            for(int counter = 0;counter < (array.length);counter++){
                laufindex = array[counter];
                for(int counter2 = 0;counter2 < (array.length);counter2++){
                    if(array[counter] == array[counter2] && counter != counter2){
                        counter2 = array.length;
                        counter = array.length;
                        return true;
                    }
                }
                }
            return false;
        }
 
Die Klammern um array.length sind nicht nötig.
Die Variable laufindex kommt aus dem nichts und wird überhaupt nicht benutzt.
Es reicht wenn die innere Schleife bei counter+1 anfängt, dadurch musst du dann auch nicht mehr counter!=counter2 prüfen.
Die äußere Schleife muss nur bis array.length-1 laufen.
Die zuweisungen counter2=array.length und counter=array.length sind vollkommen unnötig.
 
Alternativ auch erstmal sortieren (bzw eine sortierte Kopie deines Arrays anlegen, wenn du das ursprüngliche nicht verändern darfst). Dann musst du anschließend nur noch benachbarte Elemente prüfen.
 
Im Nachhinein ist mir auch aufgefallen, dass da ziemlich viel unnötig war 🙂 Habs jetzt gekürzt. So müsste es ja richtig sein 🙂
Java:
public static boolean hasDoppelte( int [] array ){
            for(int counter = 0;counter < array.length-1;counter++){
                for(int counter2 = (counter + 1);counter2 < array.length;counter2++){
                    if(array[counter] == array[counter2]){
                        return true;
                    }
                }
                }
            return false;
        }
}
 
Java:
public static boolean hasDoppelte( Object [] a ){
        HashSet<Object> m=new HashSet<Object>();
        for(Object o:a)
            m.add(o);
          
        return m.size()!=a.length;
    }
 
Eine der besten Lösungen wollte ich gar nicht sehen (auch da lässt sich noch ewas sparen)... Vielmehr ging es darum, z. B. erst mal sortieren.
 
Vielen Dank für eure Beiträge!
Java:
HashSet<Object> m=new HashSet<Object>();
        for(Object o:a)
            m.add(o)
Hierbei weiß ich noch nicht was "HashSet" usw. ist. Das werde ich sicher noch lernen, aber mir ging es auch nicht darum den Code auf möglichst wenige Zeichen zu brechen, sondern einfach eine Methode zu entwickeln, die funktioniert 🙂
Vielen Dank leute!
 
Nicht asymptotisch betrachtet, kommst du auf n/2, wenn du bei einem doppelten Elem. sofort returnst... Aber darum gings mir gar nicht. HashMap ist hier wirklich fehl am Platze.
 

Zurück
Oben