Dies ist eine Frage, als ich an einem kürzlichen Interview teilgenommen habe, ich denke es ist interessant. Nehmen wir an: int n = 10;
Eingabe: Ein Array int a[10];
Ausgabe: Ein Array float b[10];
Voraussetzung:
%Vor% Problem: Wie können wir das Array b
bevölkert ohne den Divisionsoperator /
erhalten? Und mit einem O(n)
-Algorithmus?
Ich habe einige Methoden ausprobiert, aber immer noch vergeblich. Irgendwelche Ideen?
Berechnen Sie zunächst alle linken und rechten Produkte:
%Vor% Beachten Sie, dass left[i] == left[i-1] * a[i]
, also das left
-Array in linearer Zeit berechnet werden kann. Gleichermaßen kann das right
-Array in linearer Zeit berechnet werden.
Von left
und right
kann das Array b
in linearer Zeit von b[i] = left[i-1] * right[i+1]
mit Sonderfällen für i == 0
und i == n
berechnet werden.
Tags und Links algorithm complexity-theory big-o