给定一个圆形数组,确定两个元素之间最小距离的有效方法是什么?
例如从这里搬家
[0,0,0,0,0,1]
到这里
[1,0,0,0,0,0]
从外部边界更方便,同时从这里移动
[0,0,0,0,0,1]
到这里
[0,0,0,1,0,0]
内部比较方便。
我最初的想法是这样的:
sourceLocation = rotatorElements["pos"].indexOf(1);
targetLocation = rotatorElements["pos"].rotate(delta).indexOf(1);
var D = Math.abs(targetLocation - sourceLocation);
var O = Math.abs(rotatorElements["pos"].length - D);
if ((D - O == 0)) direction = 1;
else {
if (D < O) direction = -1;
else direction = 1;
}
注意:rotate
将圆形阵列旋转定义的位置数。