Lista on permutaatio, jos se sisältää jokaisen luvun 1,2,\dots,n kerran, missä n on listan koko. Esimerkiksi listat [1], [2,1] ja [3,1,2,4] ovat permutaatioita.
Toteuta tiedostoon permutation.py luokka PermutationTracker, jossa on seuraavat metodit:
append(number): lisää luku listan loppuuncheck(): palautaTrue, jos lista on permutaatio, ja muutenFalse
Kummankin metodin tulee toimia ajassa O(1).
class PermutationTracker:
def __init__(self):
# TODO
def append(self, number):
# TODO
def check(self):
# TODO
if __name__ == "__main__":
tracker = PermutationTracker()
tracker.append(1)
print(tracker.check()) # True
tracker.append(4)
print(tracker.check()) # False
tracker.append(2)
print(tracker.check()) # False
tracker.append(3)
print(tracker.check()) # True
tracker.append(2)
print(tracker.check()) # False
tracker.append(5)
print(tracker.check()) # False
Tässä listan sisältö muuttuu seuraavasti:
- [1] (on permutaatio)
- [1,4] (ei ole permutaatio)
- [1,4,2] (ei ole permutaatio)
- [1,4,2,3] (on permutaatio)
- [1,4,2,3,2] (ei ole permutaatio)
- [1,4,2,3,2,5] (ei ole permutaatio)
Voit tutkia ratkaisusi tehokkuutta seuraavan testin avulla. Tässäkin tapauksessa koodin tulisi antaa vastaus välittömästi.
tracker = PermutationTracker()
total = 0
for i in range(10**5):
if i%2 == 0:
tracker.append(i + 2)
else:
tracker.append(i)
if tracker.check():
total += 1
print(total) # 50000
