Mi a legjobb futásidő és memória komplexitás ami elérhető ennél a Java feladatnál?
Van egy n elemű int tömb amiben 1-től n-ig fordulhatnak elő elemek. Lehet olyan ami többször és olyan ami egyszer sem. Vissza kell adni hogy hány elem nincs a tömbben.
Pl {4 1 1 3} tömbnél 1 az eredmény mert a 2 hiányzik.
{3 1 3 3 1}-nél 3 az eredmény, mert a 2 4 és 5 hiányoznak.
Azt gondoltam hogy legenerálom a számokat 1-től n-ig egy Setbe, végig megyek a tömbön és ha az aktuális elem nincs a Setben akkor növelem az eredményt eggyel.
Ez így asszem O(n) idő és O(n) memória. lehet valamelyiket tovább csökkenteni?
Nem biztos, hogy jobb eredményt ad, de az is felhasználható, hogy ahány ismétlődő (nem új) értéket látunk bejáráskor, annyi fog hiányozni is.
{4,1,1,3} : Az 1-es újbóli megjelenése egyszer, vagyis a válasz: 1.
{3,1,3,3,1} : A 3-as kétszer bukkant fel újra, az 1-es egyszer, vagyis a válasz: 3
Egyszer elég végigmenni a tömbön, de egy másik tömbben gyűjteni kell, hogy mely értékek voltak eddig. Viszont ehhez elég egy bittömb, tehát az eredeti tömb méretének töredéke, ha az eredeti értéknek itt a bit indexet feleltetjük meg. Ennek kezelése persze növeli kicsit a valós futásidőt, ha az is számít.
Lehet nem egyértelműen fogalmaztam meg "legjobb futásidő és memória komplexitás"-t úgy értettem hogy legjobb futásidő komplexitás és legjobb memória komplexitás. Nem konkrét futásidő azt rengeteg dolog befolyásolja.
Tehát #1-es már megválaszolta a kérdést, köszönöm mégegyszer.
Én is így értettem, csak egy összetett műveletet akkor sem szabad eleminek tekinteni, mint pl. a Set objektum "egyszeri" megszólítása.
Na mindegy, nem bonyolítom a dolgot. :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!