1) Die Lösung ist korrekt
Der Fall, dass null als Parameter übergeben wird muss nicht behandelt werden, das Leere Array aber schon.
2)
Ein Fehler: Hier sollte die Bedingung ar.length == 0 geprüft werden, bevor auf das Array zugegriffen wird, weil es sonst zu einer ArrayIndexOutOfBounds Exception kommen kann.
3)
2 Fehler:
- Die Länge von res sollte zu Beginn der Länge von q entsprechen. Die Aufgabe schließt nicht aus, dass in q Einträge mehrmals vorkommen, d.h. das Array könnte mit values.length zu klein sein.
- Um Strings zu vergleichen sollte die equals-Methode verwendet werden. Der Vergleich mit == vergleicht in Java nicht den Inhalt der Strings sondern nur, ob es sich um das gleiche String-Objekt handelt.
Bezüglich Bepunktung: Vermutlich gäbe es für die 3 Fehler auch 3 Punkte Abzug von der maximalen Punktzahl.