Python-39: 计算从位置x到y的最少步数

问题描述

小F正在进行一个 AB 实验,需要从整数位置 x 移动到整数位置 y。每一步可以将当前位置增加或减少,且每步的增加或减少的值必须是连续的整数(即每步的移动范围是上一步的 -1+0 或 +1)。首末两步的步长必须是 1。求从 x 到 y 的最少步数。

输入描述

输入包含两个整数 x 和 y,表示起始位置和目标位置。

输出描述

输出从 x 到 y 所需的最小步数。

代码

def solution(x_position, y_position):

    # Please write your code here

    d = abs(x_position - y_position)

    l, r = 0, d

    def cal(x):

        q, r = divmod(x, 2)

        w = q * (q + 1)

        if r:

            w += q + 1

        return w

    while l < r:

        mid = (l + r) >> 1

        if cal(mid) >= d:

            r = mid

        else:

            l = mid + 1

    return l

if __name__ == "__main__":

    #  You can add more test cases here

    print(solution(12, 6) == 4 )

    print(solution(34, 45) == 6)

    print(solution(50, 30) == 8)

你可能感兴趣的:(每日一练,算法,python)