📌  相关文章
📜  使两个数相等所需的最少操作(1)

📅  最后修改于: 2023-12-03 15:06:44.109000             🧑  作者: Mango

使两个数相等所需的最少操作

有两个数 $a$ 和 $b$,每次可以将其中一个数加 $1$ 或者减 $1$,求使它们相等所需的最少操作次数。

解法

可以通过分两种情况来考虑,假设 $a \leq b$:

  1. 如果 $a + (b - a) / 2 = b - (b - a) / 2$,那么它们已经相等了,所需的操作次数为 $0$。

  2. 如果 $a + (b - a) / 2 \neq b - (b - a) / 2$,那么可以通过让 $a$ 和 $b$ 分别加上或者减去一个相同的值,来让它们越来越接近,例如:

    • $a \leftarrow a + 1$,所需操作次数 $1$;
    • $b \leftarrow b - 1$,所需操作次数 $2$;
    • $a \leftarrow a + 1$,所需操作次数 $3$;
    • $\cdots$

    可以发现,每一步都是让两个数的差异减少了 $1$,那么所需的操作次数就是 $(b - a) / 2$,这里除以 $2$ 是因为要让它们越来越接近,所以每次只能改变一个数的值。

最后返回 $(b - a) / 2$ 即可。

代码
def min_moves_to_make_equal(a: int, b: int) -> int:
    if a > b:
        a, b = b, a

    if a + (b - a) % 2 == b - (b - a) % 2:
        return 0
    else:
        return (b - a) // 2
总结

本题的关键在于分析出每一步需要让两个数的差异减少 $1$,然后根据差异的大小来决定加上或者减去相同的值,直到两个数相等。注意代码中要先将两个数排序,以保持 $a \leq b$ 的条件。