Mat
Aktives Mitglied
Das neue Codeblock-Plugin muss getestet werden!
Ich hatte ein paar Übungsaufgaben gemacht.. eine davon bestand darin, das maximale Produkt benachbarter Zahlen in einem ungeordneten int-Array zu finden.
Da fiel mir spontan erstmal die Lösung hier ein:
Gibts da nicht auch was mit Streams? Wie würde das aussehen? Ist reduce eine Möglichkeit?
Und dann hab ich noch über Optimierung nachgedacht und bin mir nicht sicher bei der Laufzeit:
Ich hatte ein paar Übungsaufgaben gemacht.. eine davon bestand darin, das maximale Produkt benachbarter Zahlen in einem ungeordneten int-Array zu finden.
Da fiel mir spontan erstmal die Lösung hier ein:
Java:
// einfach davon ausgehen dass nur positive int kommen und kein Overflow möglich ist
int[] nums = {1, 2, 3, 10, 5, 2, 9, 3, 10};
int maxTupelProdukt = 0;
// in diesem Beispiel interessieren uns nur benachbarte Zahlen
// nums[0] und nums[nums.length-1] werden nicht als Nachbarn betrachtet
for (int i = 1; i < nums.length; i++) {
maxTupelProdukt = Math.max(maxTupelProdukt, nums[i - 1] * nums[i]);
}
// maxTupelProdukt = 10 * 5 => 50
Gibts da nicht auch was mit Streams? Wie würde das aussehen? Ist reduce eine Möglichkeit?
Und dann hab ich noch über Optimierung nachgedacht und bin mir nicht sicher bei der Laufzeit:
- Welche Laufzeit hat das? Das steigt nur linear, also \( O( n ) \), ja?
- Was wäre, wenn es ein Array mit sehr vielen Elementen wäre?
- Überlegung: immer nur linearer Anstieg
- Optimierungsversuche durch Aussieben bestimmter Kandidaten usw. würden wohl nur die Laufzeit erhöhen, durch mehrere Durchläufe und Zwischenspeichern von Werten oder Indizes?
- Was wäre aber, wenn alle möglichen Tupel betrachtet werden müssten (nicht nur direkte Nachbarn)?
- Überlegung: exponenzieller Anstieg, also \( O( n^2 ) \), ja?
- Optimierungsversuch: mit 1x vorab Sortieren könnte man das sogar auf \( O( n ) \) runter bringen, wenn man dann nur die letzten / bzw. ersten beiden Elemente multipliziert (je nachdem, ob man auf- oder absteigend sortiert)
Zuletzt bearbeitet: