CSES - Pikalista

Toteuta luokka QuickList, jossa on seuraavat metodit:

  • move(k): siirrä listan k ensimmäistä alkiota listan loppuun
  • get(i): ilmoita indeksissä i oleva alkio

Listan sisältö annetaan konstruktorissa, ja kummankin metodin tulee toimia ajassa O(1).

Toteuta tiedostoon quicklist.py luokka QuickList seuraavan mallin mukaisesti.

class QuickList:
    def __init__(self, t):
        # TODO

    def move(self, k):
        # TODO

    def get(self, i):
        # TODO

if __name__ == "__main__":
    q = QuickList([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    print(q.get(4)) # 5
    q.move(3)
    print(q.get(4)) # 8
    q.move(3)
    print(q.get(4)) # 1
    q.move(10)
    print(q.get(4)) # 1
    q.move(7)
    q.move(5)
    print(q.get(0)) # 9

Selitys Listan sisältö käyttäytyy koodipohjassa näin:

  • [1,2,3,4,5,6,7,8,9,10]
  • move(3) \rightarrow [4,5,6,7,8,9,10,1,2,3]
  • move(3) \rightarrow [7,8,9,10,1,2,3,4,5,6]
  • move(10) \rightarrow [7,8,9,10,1,2,3,4,5,6]
  • move(7) \rightarrow [4,5,6,7,8,9,10,1,2,3]
  • move(5) \rightarrow [9,10,1,2,3,4,5,6,7,8]