题解 | #计算斐波那契数最小差值#
计算斐波那契数最小差值
http://www.nowcoder.com/practice/743de16bf29041b7b423609628a1fa8c
n = int(input())
if n <= 3:
print(0)
else:
dp = [0 for _ in range(100)]
dp[1] = 1
dp[2] = 1
for i in range(3,len(dp)):
dp[i] = dp[i-1] + dp[i-2]
# 第一个大于等于 不一定存在定值
def f1(nums,n):
low = 1
higt = len(nums) - 1
while low <= higt:
mid = (low + higt) // 2
if n <= nums[mid]:
if mid == 0 or nums[mid -1 ] < n :
return mid
else:
higt = mid - 1
else:
low = mid + 1
return mid
# 最后一个等于 不一定存在定值
def f2(nums,n):
low = 1
higt = len(nums) - 1
while low <= higt:
mid = (low + higt) // 2
if n >= nums[mid]:
if mid == len(nums) - 1 or nums[mid +1 ] > n:
return mid
else:
low = mid + 1
else:
higt = mid - 1
return mid
if n in dp:
print(0)
else:
a = f1(dp,n)
b = f2(dp,n)
print(min(abs(dp[a] - n), int(n -dp[b])))
查看45道真题和解析
