字节跳动青训营|豆包MarsCode AI刷题|计算从位置 x 到 y 的最少步数

140 阅读2分钟

题目 计算从位置 x 到 y 的最少步数

问题描述

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

输入描述

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

输出描述

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

测试样例

样例1:

输入:x_position = 12, y_position = 6
输出:4

样例2:

输入:x_position = 34, y_position = 45
输出:6

样例3:

输入:x_position = 50, y_position = 30
输出:8

样例4:

输入:x_position = 0, y_position = 0
输出:0

思路

步数一定是先从1加到cnt,然后又从cnt减为1但可能会有两步步长一样长的情况。基本思路是首先计算出需要的最大步长序列(即1, 2, 3, ..., n,n-1,…,2,1),然后看这个序列能否直接到达目标位置,或者需要额外的步数。

步骤

首先用while循环得到最大步长cnt,并用总距离减去连续和得到剩余步长x

然后剩余步长x分情况讨论:

  1. 如果x==0,说明步长序列之和正好等于需要移动的距离
  2. 如果x > 0 && x <= cnt,说明在最大步长序列之后,还需要1步(步长不超过cnt)来到达目标位置,即存在两步步长一样长的情况
  3. 如果x > cnt && x <= 2 * cnt,说明在最大步长序列之后,还需要2步(每一步步长不超过cnt)来到达目标位置,即存在两步步长一样长的情况

JAVA代码