计算从位置 x 到 y 的最少步数 | 豆包MarsCode AI刷题

76 阅读1分钟

问题描述

小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

JS解法一: 参考来自https://juejin.cn/post/7433079621828116492

function solution(x_position, y_position) {
  let dist = Math.abs(x_position - y_position)
  if (dist == 0) {
    return 0;
  }
  let i = 0;
  while (dist > 0) {
    dist -= i * 2;
    i++;
  }
  if (-dist >= i-1) {
    return 2 * (i - 1) - 1
  } else {
    return 2 * (i - 1)
  }
}

js解法二: 参考来自https://juejin.cn/post/7435559894445064229

function solution(x_position, y_position) {
  let dist = Math.abs(x_position - y_position)
  if(dist == 0){return 0 ;}
  let i = 0;
  while (dist > i * 2) {
    dist -= i * 2;
    i++;
  }
  if (dist == 0) {
    return 2 * (i - 1)
  } else if (dist <= i) {
    return 2 * (i - 1) + 1
  } else if (dist > i && dist <= i * 2) {
    return 2 * (i - 1) + 2
  }
}