📅  最后修改于: 2023-12-03 15:06:44.109000             🧑  作者: Mango
有两个数 $a$ 和 $b$,每次可以将其中一个数加 $1$ 或者减 $1$,求使它们相等所需的最少操作次数。
可以通过分两种情况来考虑,假设 $a \leq b$:
如果 $a + (b - a) / 2 = b - (b - a) / 2$,那么它们已经相等了,所需的操作次数为 $0$。
如果 $a + (b - a) / 2 \neq b - (b - a) / 2$,那么可以通过让 $a$ 和 $b$ 分别加上或者减去一个相同的值,来让它们越来越接近,例如:
可以发现,每一步都是让两个数的差异减少了 $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$ 的条件。