Ich habe ein wenig Mühe bei der Bestimmung der großen o dieser Lösung Ich kam auf eine CTCI Frage Die Raumkomplexität sollte O (1) sein, ist aber die Laufzeit AUF)? Es scheint mehr nach O (N^2) wegen der while-Schleife zu sein. Die while-Schleife wird jedoch nicht für jedes Element innerhalb der for-Schleife N-mal ausgeführt.Laufzeit und Platz Komplexität dieses Codes
public static int[] missing_two(int [] n){
for(int i=0;i<n.length;i++){
while(n[i]!=i){
int temp=n[i];
n[i]=n[n[i]];
n[temp]=temp;
}
}
}
Wäre 6,0,1,2,3,4,5 ein Beispiel für den schlimmsten Fall hier? Die while-Schleife wird n-mal auf dem ersten Index ausgeführt. und 0 danach. Also sollte das nicht O (2n) => O (n) sein?
Sind Sie sicher, dass der Code funktioniert? Ich kann es falsch parsieren, aber wenn 'n [i] == i' dann' n [i] == n [n [i]] 'so wird Ihre Ausgangsbedingung' n [i]! = I + 1' Du steckst auf einer Endlosschleife fest. – xvan
ahh danke, dass du darauf hinweist. Sie haben recht, – Nych