2016-07-23 8 views
1

Wir erhalten eine quadratische Matrix, die mit Zahlen aus [1, n * n] in einer Reihe Hauptform gefüllt ist. Wir müssen das k-te Element finden, wenn wir es in einer spiralförmigen Reihenfolge durchlaufen. Die einzige Lösung, die ich mir vorstellen konnte, war, eine spiralförmige Traversierung durchzuführen und einen Zähler für die Anzahl der durchlaufenen Elemente aufrechtzuerhalten. Wenn Zählerwert k wird, drucken wir die Nummer in dieser Instanz.K-tes Element in einer spiralförmigen Traversierung einer speziellen Matrix

Kann dies in weniger als O (n * n) gelöst werden? Wenn ja, dann wie das gleiche Problem lösen, wenn Matrixelemente mit zufälligen Elementen?

Link to the question

+0

Die Anzahl der Elemente in jedem Ring von dem vorherigen unterscheidet Ring um 8. – user3386109

+0

Sie können grob in O dieses Problem lösen (1); Sie müssen die ganzzahlige Quadratwurzel von 'n * n-k' finden. Mit der babylonischen Methode zum Beispiel können Sie das in 'log log n * n'-Iterationen lösen (was' O (log log n) 'ist) – rici

Antwort

1

Der erste Kreis haben 4(n - 1) Knoten,

der zweite Kreis haben 4(n - 2) Knoten,

...

der letzte Kreis haben 1 Knoten.

Schritt 1: Sie finden, welcher Kreis das Element, das Sie finden, ist. O(n) Schritt 2: Verwenden Sie die Methode traversed, um dieses Element zu bestimmen. O(4n)

Endlich O(n)

+0

Der zweite Kreis hat 4 (n-3) Knoten (nicht 4 (n -2)). Nachdem der erste Kreis abgezogen wurde, bleibt eine Untermatrix von (n-2) X (n-2) übrig. Also, die Anzahl der Elemente in diesem Kreis ist 4 * (n-3) – Bugaboo