如果退出数组,请从另一侧输入

If exit array, enter from the other side

本文关键字:输入 退出 数组 如果      更新时间:2023-10-16

例如,如果我有1、2、3、4、5、6、7数组,并且我处于第四位(数字5),并且必须将其移至正确的4个位置,您应该处于位置1(数字2)。负数也是如此,但您向左移动。我猜需要一段时间(true)循环?

假设i是索引,而n是数组的大小。对于正i所需索引= i%n对于负i i%n返回负残基,因此所需的索引是 n+i%n

您可以使用

int index(int i, int n) {
   return i%n < 0 ? n + (i%n) : i%n;
}

您可以像这样计算索引:

var newIndex = (index + 4) % 7;

因此,第四位置变为(4 4)%7或1。

始终使用命名函数和跟随代码路径,而不是voodoo一个工作

    public void MyTest()
    {
        var testData = new[] { 1, 2, 3, 4, 5, 6, 7 };
        Assert.AreEqual(2, TraverseCircularArray(testData, 5, 3));
        Assert.AreEqual(6, TraverseCircularArray(testData, 2, -4));
    }
    private int TraverseCircularArray(int[] array, int currentIndex, int interval)
    {
        var i = array[currentIndex];
        if (currentIndex + interval < 0)
            i = array[array.Length + (interval + currentIndex)];
        else if (currentIndex + interval >= array.Length)
            i = array[currentIndex - interval - 1];
        else
            i = array[currentIndex + interval];
        return i;
    }