题解 | #计算斐波那契数最小差值#

计算斐波那契数最小差值

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])))

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务