Raupen und Blätter. Können wir tun, besser als O(n*c)?

Fand diese Frage während der Vorbereitung für die interviews.

Nehme an, dass einige Raupen von unten anfangen und Sprung zum nächsten Blatt. Sie
Essen Sie das Blatt vor dem Sprung zum nächsten. Wir bekommen ein array repräsentiert springen Schritte
gemacht von Raupen. Wenn das array [2,4,7], es bedeutet, caterpillar[0] Essen Blatt-2,4,6..
caterpillar[1] fressen Blatt-4,8,12.. und caterpillar[2] Essen 7,14,21...0 stellt Boden.
Berechnen Sie die Anzahl der übrig lässt.

Lassen Sie uns davon ausgehen, dass die Raupe springt zum nächsten Ziel, wenn das aktuelle Blatt ist gegessen. Dies bedeutet, dass bei caterpillar[7] findet, dass Blatt 28 wird gegessen, es wird gehen, um zu Essen, Blatt 35.

Sei c die Anzahl der Raupen und n die Anzahl der Blätter.

Des offensichtlichen brute-force-Lösung ist die Iteration über ein bool-array der Größe n für jede Raupe und markieren Sie es als wahr, wenn gegessen oder sonst false. Es dauert O(n*c) Zeit. Können wir besser machen?

  • Jedes Blatt, deren Anzahl nicht ein Vielfaches von jeder der zahlen in der gegebenen array bleibt übrig.
  • Sie möchten möglicherweise verwenden Sie das Einschluss-Ausschluss-Prinzip
  • Ja, ich verstehe, dass das problem reduziert sich auf die Aussage, die Sie soeben gegeben. Dann ist die Frage, konvertiert zu was ist der beste Weg zu finden, zahlen, die kein Vielfaches von jedem die Nummer.
InformationsquelleAutor Hoxeni | 2014-12-02
Schreibe einen Kommentar