Editorial for Pikado
Submitting an official solution before solving the problem yourself is a bannable offence.
Analiza
Potrebno je naći sve elemente niza koji se pojavljuju bar puta u nizu. Elementi niza su u intervalu tako da postoji različitih vrednosti koje se mogu pojaviti u nizu. Možemo iskoristiti pomoćni niz dužine koji predstavlja broj pojavljivanja svakog elementa u početnom nizu.
Na početku niz ima vrednost na svakoj poziciji. Jednim prolaskom kroz niz , kada naiđeimo na element povećavamo broj pojavljivanja tog elementa za . Pošto ne možemo pristupiti negativnim indeksima broj pojavljivanja elementa koji ima vrednost pamtimo u nizu na poziciji . Tako je interval preslikan u interval što nam omogućava da koristimo niz.
Prolaskom kroz niz prebrojavamo i ispisujemo sve brojeve koji su se pojavili bar puta u nizu. Ako za neko važi da je to znači da se broj pojavio bar puta.
Implementacija korišćenjem niza je složenosti . Može se koristiti i struktura zasnovana na pretraživačkom stablu (std::map
složenosti ) ili heš tabela (std::unordered_map
očekivane složenosti ) što nam omogućava rešenje i kada su elementi niza mnogo veliki i nemamo dovoljno memorije da napravimo niz koji obuhvata sve potencijalne vrednosti.
Comments