Annettuna on lista lukuja ja tehtäväsi on selvittää, montako lukua listalta voidaan valita siten, että minkään kahden valitun luvun erotus ei ole suurempi kuin .
Voit olettaa, että listalla on enintään lukua ja ja jokainen listan luku on väliltä . Tavoitteena on, että algoritmin aikavaativuus on tai .
Toteuta tiedostoon bigset.py
funktio find
, joka ilmoittaa montako lukua listalta voidaan enintään valita.
def find(t, x): # TODO if __name__ == "__main__": print(find([10, 10, 10, 10], 0)) # 4 print(find([4, 2, 7, 1], 0)) # 1 print(find([7, 3, 1, 5, 2], 2)) # 3 print(find([7, 3, 1, 5, 2], 1000)) # 5 print(find([19, 4, 7, 17, 3, 15, 10], 5)) # 3 print(find([10000, 987654, 123456, 139562, 13613225], 50000)) # 2
Selitys: Toisessa esimerkissä listalla kaikki luvut ovat erisuuria, joten voimme valita vain yhden luvun, sillä muuten löytyisi aina lukupari, jonka erotus on suurempi kuin . Kolmannessa esimerkissä listalta voidaan valita kolme lukua: , ja ja näiden lukujen väliset erot ovat kaikki korkeintaan .