Tehtäväsi on toteuttaa luokka, joka pitää yllä listaa luvuista sekä tarjoaa tehokkaan metodin, joka ilmoittaa, toistuuko jokin luku listalla.
Toteuta tiedostoon repeatlist.py luokka RepeatList, jossa on seuraavat metodit:
append(number): lisää luku listan loppuunrepeat(): palautaTrue, jos jokin luku toistuu listalla, ja muutenFalse
Kummankin metodin tulee toimia ajassa O(1).
class RepeatList:
def __init__(self):
# TODO
def append(self, number):
# TODO
def repeat(self):
# TODO
if __name__ == "__main__":
numbers = RepeatList()
print(numbers.repeat()) # False
numbers.append(1)
numbers.append(2)
numbers.append(3)
print(numbers.repeat()) # False
numbers.append(2)
print(numbers.repeat()) # True
numbers.append(5)
print(numbers.repeat()) # True
Tässä listalle lisätään ensin luvut 1, 2 ja 3, minkä jälkeen listan sisältö on [1,2,3] eikä siinä ole toistuvaa lukua. Tämän jälkeen listalle lisätään luku 2, minkä jälkeen listan sisältö on [1,2,3,2] ja siinä on toistuva luku 2. Lopuksi listalle lisätään luku 5, minkä jälkeen listan sisältö on [1,2,3,2,5] ja siinä on edelleen toistuva luku 2.
Voit tutkia ratkaisusi tehokkuutta seuraavan testin avulla. Tässäkin tapauksessa koodin tulisi antaa vastaus välittömästi.
numbers = RepeatList()
total = 0
for i in range(10**5):
numbers.append(i * 999983 % 12345)
if numbers.repeat():
total += 1
print(total) # 87655
