我想解決一個問題,部分解決方案是找到小於輸入數字的finbonacci數字的總和。現在輸入數字的上限是10 ** 9。我已經將問題簡化爲以下O(n)解決方案,我想知道是否有更高效的解決方案。找到小於給定數字的斐波那契和小於O(n)
b=[1, 2, 4, 7, 12, 20, 33, 54, 88, 143, 232, 376, 609, 986, 1596, 2583, 4180, 6764,
10945, 17710, 28656, 46367, 75024, 121392, 196417, 317810, 514228, 832039,
1346268, 2178308, 3524577, 5702886, 9227464, 14930351, 24157816,
39088168, 63245985, 102334154, 165580140, 267914295, 433494436, 701408732, 1134903169, 1836311902]
def test_lambda(a):
list_numbers= filter(lambda x: x<=a, b)
return len(list_numbers)
正如你可以看到我與給定的輸入比較表b的值並返回一個小於給定數量的元素。
b爲fibonaccis數高達該索引的總和的列表,因此第一數目爲1時,總和爲1時,第二是1的總和是2時,第三2之和4 ...
你知道有一個小於O(n)的解決方案,或者你只是想要一個? –
只需使用二進制搜索... –
我不知道是否有一個小於O(n)的解決方案... – fazkan