Przesuń zera na koniec listy

Zadanie 2 z 10 · rozdział 24Trudność: 2 z 3liststabilnośćprzekształcenie

Treść zadania

Otrzymujesz listę liczb całkowitych. Przenieś wszystkie zera na koniec listy, zachowując kolejność pozostałych elementów.

Dane wejściowe

  • 1. linia: n — długość listy
  • 2. linia: n liczb całkowitych oddzielonych spacjami

Dane wyjściowe

Jedna linia: n liczb listy po przekształceniu, oddzielonych spacjami.

Ograniczenia

  • 1 ≤ n ≤ 1000
  • elementy listy są z przedziału $[-10^6, 10^6]$

Uwagi

  • Spróbuj przekształcić listę w miejscu, bez tworzenia nowej listy: przepisuj kolejne niezerowe elementy na początek listy, a resztę wypełnij zerami. Takie rozwiązanie działa w czasie $O(n)$.

Przykład

Wejście
11
0 1 3 0 8 12 0 4 0 7 0
Wyjście
1 3 8 12 4 7 0 0 0 0 0

Potrzebujesz teorii?

Zasady obowiązujące w rozdziale 24

Trudniejsze zadania na listach: przekształcenia w miejscu, sumy prefiksowe, kopiec i programowanie dynamiczne. Liczy się nie tylko poprawny wynik, ale też dobry algorytm — w testach są także długie listy, na których rozwiązanie „sprawdzające wszystkie możliwości” nie zdąży się wykonać.

Konwencje wspólne:

  • Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.
  • Lista liczb jest podawana w dwóch liniach: w pierwszej jest liczba elementów n, w drugiej n liczb całkowitych oddzielonych spacjami (o ile zadanie nie mówi inaczej).
  • Listę wynikową wypisuj w jednej linii, a jej elementy oddzielaj pojedynczą spacją (o ile zadanie nie mówi inaczej).
  • Indeksy liczymy od 0.

Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.

Python uruchomi się w przeglądarce przy pierwszym teście.

Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.

Testy

Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.

Test 1

Nie uruchomiono
Wejście
1
0
Oczekiwane wyjście
0

Test 2

Nie uruchomiono
Wejście
4
0 0 0 0
Oczekiwane wyjście
0 0 0 0

Test 3

Nie uruchomiono
Wejście
3
5 -2 7
Oczekiwane wyjście
5 -2 7

Test 4

Nie uruchomiono
Wejście
6
0 1 0 3 0 5
Oczekiwane wyjście
1 3 5 0 0 0

Test 5

Nie uruchomiono
Wejście
6
0 0 -1 0 2 -3
Oczekiwane wyjście
-1 2 -3 0 0 0

Test 6

Nie uruchomiono
Wejście
8
4 0 4 0 3 0 4 9
Oczekiwane wyjście
4 4 3 4 9 0 0 0

Test 7

Nie uruchomiono
Wejście
30
34 -6 -50 0 0 0 48 0 -33 -39 0 0 0 0 0 0 0 0 0 0 0 0 2 13 0 -44 2 36 0 17
Oczekiwane wyjście
34 -6 -50 48 -33 -39 2 13 -44 2 36 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Uruchom z własnymi danymi