Ich versuche, das folgende Problem zu lösen:COINCHANGE: Dynamische Programmierung O (N) Komplexität
Sie sind eine Reihe von Münzen gegeben S. Auf wie viele Arten kann man Summe N Sie machen unter der Annahme haben unendliche Menge von jedem Münze im Set.
Hinweis: Münzen im Set S werden einzigartig sein. Die erwartete Raumkomplexität dieses Problems ist O (N). Beachten Sie, dass die Antwort überlaufen kann. Also, geben uns die Antwort% 1000007
Ich habe folgende Lösung DP
HashMap<Integer, HashMap<Integer, Integer>> memo = new HashMap<>();
public int coinchange2(List<Integer> a, int b) {
return use(a, 0, b);
}
private int use(List<Integer> a, Integer index, int n) {
if(memo.containsKey(a.get(index))) {
if(memo.get(a.get(index)).containsKey(n)) {
return memo.get(a.get(index)).get(n);
}
}
if(n == 0 && a.get(index)>=0) {
return 1;
}
if((n > 0 && a.get(index) == 0) || n < 0) {
return 0;
}
int nbWays = 0;
for(int i = index; i < a.size(); i++) {
nbWays += use(a, i, n - a.get(i))%1000007;
}
if(!memo.containsKey(a.get(index))) {
memo.put(a.get(index), new HashMap<Integer, Integer>());
}
nbWays = nbWays % 1000007;
memo.get(a.get(index)).put(n, nbWays);
return nbWays;
}
Aber ich immer noch nicht die Anforderungen erfüllt werden: „Teilweise Richtige Antwort Machen Sie Ihre Lösung effizienter“
Wissen Sie, was dazu führen könnte, dass dieser Code nicht O (N) komplex ist?
Ich denke, Sie haben Recht, der Zähler bei der Verwendung zeigen O (n^2) Komplexität, danke! –
Sie setzen mich auf die guten Spuren, ich werde diese Version überarbeiten und eine Antwort mit einer Java-Version mit O (N) -Komplexität hinzufügen, wenn ich dazu komme! –
Hört sich gut an! Ich bin gespannt zu sehen, wie Sie es lösen! –