Kezdőoldal » Számítástechnika » Programozás » Mi a legjobb futásidő és...

Mi a legjobb futásidő és memória komplexitás ami elérhető ennél a Java feladatnál?

Figyelt kérdés

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?



2020. ápr. 28. 11:46
1 2
 1/17 anonim ***** válasza:
70%

"Ez így asszem O(n) idő és O(n) memória. lehet valamelyiket tovább csökkenteni?"


A space-t lehet konstansra.

2020. ápr. 28. 13:30
Hasznos számodra ez a válasz?
 2/17 A kérdező kommentje:

Tehát akkor O(n) idő és O(1) memória a legjobb megoldás.

Rendben, köszi!

2020. ápr. 28. 13:54
 3/17 anonim ***** válasza:
53%
Le is írnád, hogyan? Én nem látok rá lehetőséget.
2020. ápr. 30. 07:38
Hasznos számodra ez a válasz?
 4/17 anonim ***** válasza:
70%

Mivel 1-től n-ig fordulnak elő a számok, így minden szám megfeleltethető a tömb egy indexének.

Végig mégsz a tömbön és az előforduló számoknak megfelelő indexeket megjelölöd, aztán végig mész mégegyszer és ha egy index nincs megjelölve, akkor növeled eggyel az eredményt.

2020. ápr. 30. 11:24
Hasznos számodra ez a válasz?
 5/17 anonim ***** válasza:
70%
Gondolkoztam kicsit rajta, nem kell második kör sem, egy bejárással megoldható.
2020. ápr. 30. 12:58
Hasznos számodra ez a válasz?
 6/17 anonim ***** válasza:
53%

És hogyan jelölöd meg az indexeket, ha nem hozhatsz létre egy másik tömböt?

És hogyan számolod meg őket egy bejáráson belül? Amíg a megjelöléssel nem értél a végére, nem tudhatjuk, melyik indexnél kell eggyel növelni az eredményt.

2020. ápr. 30. 15:28
Hasznos számodra ez a válasz?
 7/17 anonim ***** válasza:
70%

"És hogyan jelölöd meg az indexeket, ha nem hozhatsz létre egy másik tömböt?"


Negatívra állítom az értéküket.


"És hogyan számolod meg őket egy bejáráson belül? Amíg a megjelöléssel nem értél a végére, nem tudhatjuk, melyik indexnél kell eggyel növelni az eredményt."


Az egy bejárásos megoldásnál nem a megjelölteket számolnám.

Tudom, hogy N szám van összesen, tehát ha megjelölök egyet, akkor már csak N - 1 hiányozhat. Ha megjelölök mégegyet, akkor már csak N - 2 és így tovább. Ha a tömb végére érve megjelöltem M indexet, akkor N - M a megoldás.


Két körös megoldás olyan szempontból jobb, hogy ott vissza lehet állítani a tömb eredeti állapotát (ha szükséges, a kérdésben nincs erre vonatkozó megkötés), egy körös megoldásnál nem.

2020. ápr. 30. 16:09
Hasznos számodra ez a válasz?
 8/17 anonim ***** válasza:
0%

Vagyis ha mondjuk n=25 és az első tag 24, akkor a 24-es indexű tagot átállítod pl. -1-re, jól értem? Hogyan fogod akkor figyelembevenni azt, amelyik eredetileg a 24-en volt?

De még ha működne is elfogadhatatlan egy ilyen függvénytől, hogy megsemmisíti a tömböt. Miért akarnánk tudni egy tömbről, hogy hány különböző eleme van, ha nem akarunk vele tovább dolgozni? Íratlan szabály, hogy ha a feladat célszerűsége nem foglalja magában, vagy nincs külön megengedve, akkor nem módosítjuk a kapott adatszerkezeteket.

2020. ápr. 30. 21:30
Hasznos számodra ez a válasz?
 9/17 anonim ***** válasza:
70%

Úgy érzem, mintha egy óvodásnak magyaráznám a differenciálszámítást.

Mi a fenéért állítanám a 24-et -1-re? Ha 24 egy érték, akkor -24, re állítom. Így bármikor visszakaphatom az eredeti értéket.

Azt is külön kiemeltem, hogy a 2 körös megoldásnál visszaállítható az eredeti tömb, 1 körben nem (bár utána ott is bármikor, egy újabb körben).

2020. máj. 1. 07:02
Hasznos számodra ez a válasz?
 10/17 A kérdező kommentje:
#8 miért lenne elfogadhatatlan a bemeneti tömb "megsemmisítése"? Egyrészt ez nem feltétel a feladatnál, másrészt sok valós életbeli példát lehet mondani amikor abszolút elfogadható. Pl hozzáférést kapsz egy REST API endpointhoz ami egy tömböt ad vissza, viszont neked csak részinformációra van szükséged a tömbből a számításaidhoz. Ha úgy tudod kinyerni leghatékonyabban a részinformációt hogy a tömb elemeit közben narancssárga lófszra állítod akkor nyugodtan megteheted.
2020. máj. 1. 10:58
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!