Tehtäväsi on toteuttaa luokka, joka pitää yllä listaa luvuista sekä tarjoaa metodin, joka kasvattaa tehokkaasti kaikkia listan lukuja halutun verran.
Toteuta tiedostoon changelist.py luokka ChangeList, jossa on seuraavat metodit:
append(number): lisää luku listan loppuunget(index): hae luku listaltachange_all(amount): kasvata kaikkia listan lukuja halutun verran
Metodissa change_all parametri amount ilmaisee, paljonko listan lukuja tulee kasvattaa. Parametri voi olla myös negatiivinen, jolloin lukuja vähennetään. Kaikkien metodien tulee toimia ajassa .
class ChangeList: def __init__(self): # TODO def append(self, number): # TODO def get(self, index): # TODO def change_all(self, amount): # TODO if __name__ == "__main__": numbers = ChangeList() numbers.append(1) numbers.append(2) numbers.append(3) print(numbers.get(0)) # 1 print(numbers.get(1)) # 2 print(numbers.get(2)) # 3 numbers.change_all(2) print(numbers.get(0)) # 3 print(numbers.get(1)) # 4 print(numbers.get(2)) # 5 numbers.append(8) numbers.change_all(-1) print(numbers.get(0)) # 2 print(numbers.get(1)) # 3 print(numbers.get(2)) # 4 print(numbers.get(3)) # 7
Tässä listalle lisätään ensin luvut , ja , minkä jälkeen listan sisältö on . Sitten listan kaikkiin lukuihin lisätään luku , minkä jälkeen listan sisältö on . Lopuksi listalle lisätään luku ja kaikkiin lukuihin lisätään luku , minkä jälkeen listan sisältö on .
Voit tutkia ratkaisusi tehokkuutta seuraavan testin avulla. Tässäkin tapauksessa koodin tulisi antaa vastaus välittömästi.
numbers = ChangeList() total = 0 for i in range(10**5): numbers.append(i + 1) numbers.change_all(i % 11 - 5) total += numbers.get(i // 2) print(total) # 2500049970
