Annettuna on lista, josta tulee poimia mahdollisimman monta lukua. Ensimmäinen luku saa olla mikä tahansa listan luku ja tämän jälkeen seuraavan poimitun luvun tulee olla tasan yhden suurempi kuin edellinen. Kuinka monta lukua voidaan näin korkeintaan poimia?
Voit olettaa, että listalla on enintään lukua ja että jokainen luku on väliltä . Tavoitteena on, että algoritmin aikavaativuus on tai .
Toteuta tiedostoon interval.py
funktio count
, joka ilmoittaa, montako lukua listalta voidaan enintään poimia halutulla tavalla.
def count(t): # TODO if __name__ == "__main__": print(count([1, 1, 1, 1])) # 1 print(count([10, 4, 8])) # 1 print(count([7, 6, 1, 8])) # 3 print(count([1, 2, 1, 2, 1, 2])) # 2 print(count([987654, 12345678, 987653, 999999, 987655])) # 3
Selitys: Listalta voidaan poimia vain yksi luku, sillä minkään kahden luvun erotus ei ole tasan . Listalta on mahdollista poimia lukua järjestyksessä , ja .