Annettuna on lista kokonaislukuja, jotka kaikki ovat väliltä . Listalle halutaan lisätä uusi kokonaisluku väliltä , jonka etäisyys lähimpään listalla jo valmiiksi olevaan lukuun on mahdollisimman suuri. Kuinka suuri tuo etäisyys voi korkeintaan olla?
Voit olettaa, että listalla on korkeintaan lukua ja on korkeintaan . Tavoitteena on, että algoritmin aikavaativuus on tai .
Toteuta tiedostoon distance.py
funktio find
, joka ilmoittaa suurimman mahdollisen etäisyyden.
def find(t, k): # TODO if __name__ == "__main__": print(find([1, 2, 9], 11)) # 3 print(find([2, 1, 3], 3)) # 0 print(find([7, 4, 10, 4], 10)) # 3 print(find([15, 2, 6, 4, 18], 20)) # 4 print(find([41222388, 392676742, 307110407, 775934683, 25076911], 809136843)) # 191628970
Selitys: Jokainen kokonaisluku väliltä on korkeintaan :n päässä jostain listan luvusta. Yksi tällainen luku on esimerkiksi , joka on kolmen päässä sitä lähimmästä luvusta . Luku puolestaan on kolmen päässä luvusta . Jokainen luku väliltä löytyy jo valmiiksi listalta . Siksi suurin etäisyys on .