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