Tehtäväsi on toteuttaa luokka, joka pitää yllä listaa luvuista sekä tarjoaa metodin, joka ilmoittaa, montako eri esiintymismäärää listan luvuilla on. Esiintymismäärä tarkoittaa, montako kertaa luku esiintyy listalla.
Esimerkiksi listassa [1,2,3,1,2,3] on vain yksi esiintymismäärä, koska jokainen luku esiintyy kahdesti. Listassa [1,2,2,3,3,3] on kolme esiintymismäärää, koska luku 1 esiintyy kerran, luku 2 kahdesti ja luku 3 kolmesti.
Toteuta tiedostoon occurrences.py
luokka OccurrenceTracker
, jossa on seuraavat metodit:
append(number)
: lisää luku listan loppuuncount()
: ilmoita, montako eri esiintymismäärää listan luvuilla on
Kummankin metodin tulee toimia ajassa O(1).
class OccurrenceTracker: def __init__(self): # TODO def append(self, number): # TODO def count(self): # TODO if __name__ == "__main__": tracker = OccurrenceTracker() tracker.append(1) tracker.append(2) tracker.append(1) tracker.append(3) print(tracker.count()) # 2 tracker.append(2) tracker.append(3) print(tracker.count()) # 1 tracker.append(2) tracker.append(3) tracker.append(3) print(tracker.count()) # 3
Voit tutkia ratkaisusi tehokkuutta seuraavan testin avulla. Tässäkin tapauksessa koodin tulisi antaa vastaus välittömästi.
tracker = OccurrenceTracker() total = 0 for i in range(10**5): tracker.append(i % 100 + 1) total += tracker.count() print(total) # 198901