Ich habe versucht, dieses Problem zu lösen: Ссылка
Der folgende Code hat alle Tests in 44 ms bestanden.
%Vor%Aber der folgende Code hat alle Tests in nur 20 ms bestanden.
%Vor%Warum gibt es so einen signifikanten Unterschied? Der Maximalwert wird nur einmal in beiden Samples geändert, aber das Ändern in den if-else-Anweisungen ist weitaus effizienter als das Ändern am Ende der for-Schleife. Ist dies eine Ausnahme oder sollten wir diesem Standard bei der Codierung folgen?
Beim Vereinfachen (nicht früh optimieren, siehe max!) bekommt man
%Vor%Beachte den doppelten Wert von i in der Originalversion. Wenn das erste Math.max durch ein if ersetzt wird, könnte der Code schneller sein.
Es ist schwer, eine Erklärung abzugeben w.r.t. Um hier für die beiden ursprünglichen Versionen zu beschleunigen, erkannte der Hotspot-Compiler möglicherweise die Redundanz. Oder was auch immer.
Es wäre schön, eine Java-8-Version mit mp.putIfAbsent
oder so zu sehen, aber das könnte es langsamer machen.
Tags und Links algorithm java performance time