循环数值序列中两个数字之间的距离

丹尼尔

我想在循环顺序中找到两个数字之间的最短距离,例如0到6:

... 0 1 2 3 4 5 6 0 1 2 3 4 5 6 0 1 2 3 4 5 6 ...

在还需要知道哪个“方式”更短(向左或向右)。

因此,如果我的两个数字分别为0和6,则通过向后(向左)计数,最短距离为1。

以下功能有效,但前提next是必须大于crt

var MAX_NUMBER = 6; // 0 1 2 3 4 5 6   0 1 2 3 4 5 6   0 1 2 3 4 5 6

function shorterDirection(crt, next) {
  var toRight = next - crt;
  var toLeft = MAX_NUMBER - (next - crt - 1);

  return toLeft < toRight ? 'left' : 'right';
}

console.log(shorterDirection(0, 6));

我不知道如何使其双向工作。例如,如果使用shorterDirection(4, 3),我希望函数返回left

亭子

您可以使用此:

function shorterDirection(crt, next) {
  var toRight = (next + MAX_NUMBER+1 - crt) % (MAX_NUMBER+1);
  return toRight > (MAX_NUMBER+1) / 2 ? 'left' : 'right';
}

请注意,可以有联系。在这种情况下,以上方法将返回left,即使效果right一样好。

如您所见,里面有很多东西MAX_NUMBER+1如果您有一个常数NUMBER_COUNT,它将比MAX_NUMBER现在的常数大一个更合适

这个怎么运作

您将首先编写以下代码:

var toRight = next - crt;

但是,当next小于crt时,这是“错误的” -您得到一个负数。为了解决这个问题,您可以添加MAX_NUMBER+1

var toRight = next + NUMBER+1 - crt;

...但是现在当next大于crt时,您得到的数字太大您可以通过减去NUMBER+1所需的尽可能多的值来解决,以达到0 ... MAX_NUMBER范围这就是取模(%)运算符的作用。因此,您得到:

var toRight = (next + MAX_NUMBER+1 - crt) % (MAX_NUMBER+1);

获得该结果后,您可以推断出,如果需要花费一半以上的数字去右边,那么最好去左边(那将少于一半的数目)。编码为:

return toRight > (MAX_NUMBER+1) / 2 ? 'left' : 'right';

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在两个数字之间循环数字

两个数字之间的序列和

两个整数值之间的距离

跨多个数组的两个数字之间的最大平均距离

从python中的列表中选择两个数字,其概率随着它们之间的相对距离而衰减

循环链表中两个节点之间的距离

在数组中的两个数字之间存储数字

查找数组中的数字是否在两个数字之间,并输出介于两个数字之间的值

在Laravel中的两个数字(价格)之间搜索

在 JavaScript 中创建两个数字之间的范围

数组中两个数字之和之间的最小差

在Python中查找值在两个数字之间的位置

数据框中两个数字之间的除法

在matplotlib中增加图中两个数字之间的除数

PHP搜索数组中两个数字之间的值

列表中两个数字之间的JavaScript函数?

循环迭代中另外两个数字的比较

在数值积分过程中,两个物体之间的距离保持恒定

两个数字之间的指数概率?

在两个数字之间查询

在Javascript / jQuery中创建两个数字(包括两个数字)之间的所有整数的数组

R中两个数据帧的行之间的欧式距离

存储在两个数据帧中的向量之间的后续距离

从列表中删除两个数字之间的差异小于特定数字的数字

两个数组之间的余弦距离计算 - Python

两个数字相除总是返回整数值

如何查找两个数字是否为格雷码序列中的连续数字

两个数值范围之间的重叠分数

如何查找列表中的数字是否在列表中两个数字之间?