Najneskorší termín odovzdania: 13.3.2016 (nedeľa) o 21:00
Odovzdávaný súbor: SpajanyZoznam.java
Doplňujúce požiadavky:
Obe metódy musia pracovať v čase O(n) a pamäťou O(1), kde n
je počet hodnôt (uzlov) v spájanom zozname. Ak metódy budú potrebovať viac ako jeden prechod spájaným zoznam, bodový zisk bude znížený o 30%.
Do triedy SpajanyZoznam
pridajte metódu pripocitajVektor
, ktorá ako parameter dostane referenciu na pole čísel. Označme dĺžku tohto poľa d
a počet prvkov zoznamu n
. Výsledkom metódy pripocitajVektor
je:
d≤n
, tak ku prvým d
prvkom spájaného zoznamu prirátame prislúchajúcu hodnotu z poľa. Konkrétne k i-temu prvku spájaného zoznamu pripočítame i-ty prvok poľa.
d>n
, tak ku každému prvku spájaného zoznamu pripočítame prislúchajúcu hodnotu z poľa (k i-temu prvku zoznamu pripočítame i-ty prvok poľa) a na koniec zoznamu pridáme zostávajúce (nepripočítane) prvky poľa (celkovo d-n
prvkov).
Príklad: Predpokladajme, že spájaný zoznam obsahuje hodnoty [8, 5, 2]
.
Volanie metódy:
pripocitajVektor([2, 8])
spôsobí, že spájaný zoznam bude obsahovať hodnoty [10, 13, 2]
(pretože [10=8+2, 13=5+8, 2]
).
pripocitajVektor([2, 8, 10, 15, 20])
spôsobí, že spájaný zoznam bude obsahovať hodnoty [10, 13, 12, 15, 20]
(=[8+2, 5+8, 2+10, 15, 20]
).
Metóda nech pracuje v lineárnom čase vzhľadom k dĺžke zoznamu a vektora, t.j. O(n+k)
.
Do triedy SpajanyZoznam
pridajte metódu filtruj(double dh, double hh)
, ktorá zo spájaného zoznamu odstráni všetky uzly, ktorých hodnota neleží v intervale <dh, hh>
. Vzájomné poradie ostatných uzlov (hodnôt) v zozname musí ostať zachované.
Príklad:
[5, 7, 1, 9, 3, 30, 6, 4]
po volaní filtruj(6, 20)
vznikne zoznam s hodnotami [7, 9, 6]
,