Ich habe eine enge Schleife, die Koprime sucht. Eine Liste primeFactors
. Ihr n-tes Element enthält eine sortierte Liste der Hauptzerlegung von n. Ich überprüft, ob c
und d
sind coprimes checkIfPrimes
Effizienter Weg, um herauszufinden, ob zwei sortierte Listen das gleiche Element Java enthalten.
boolean checkIfPrimes(int c, int d, List<List<Integer>> primeFactors) {
List<Integer> common = new ArrayList<>(primeFactors.get(d)); //slow
common.retainAll(primeFactors.get(c));
return (common.isEmpty());
}
primeFactors.get(d).retainAll(primeFactors.get(c))
sieht vielversprechend aus verwenden, aber es wird mein wiederverwendbar primeFactors
Objekt verändern.
Das Erstellen eines neuen Objekts ist relativ langsam. Gibt es eine Möglichkeit, diesen Schritt zu beschleunigen? Kann ich irgendwie die Tatsache ausnutzen, dass Listen sortiert sind? Soll ich stattdessen Arrays verwenden?
Welche Version von Java? Wenn 8+, haben Sie einige leistungsbezogene Alternativen – JoeG
@JoeG Ja, es ist Java8. – sixtytrees
Klingt, als ob Sie nach ['Collections.disjoint()'] suchen (https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#disjoint (java.util. Sammlung,% 20java.util.Collection)). – shmosel