旋转数组中的四元组

时间:2018-03-15 14:38:58

标签: java arrays generics rotation

给定是一个通用的数组T [] arr。此阵列中的每个Quadrupel都应向左旋转,所以

  

“a b c d e f” - > “b c d a e f”

如果Arrays End不是完整的Quadrupel,则这些元素不应旋转。

我的想法是:

T[] arr2;

int x;

T temp0 = arr[x+0];

T temp1 = arr[x+1];

T temp2 = arr[x+2];

T temp3 = arr[x+3];

arr2[x+3] = temp0;

arr2[x+2] = temp3;

arr2[x+1] = temp2;

arr2[x+0] = temp1;

x += 1;

所以我正在切换第一个Quadrupel的Elements并将它们保存到第二个阵列。 但是我如何实现,一个不完整的Quadruple不会旋转,它会阻止数组的结束?

3 个答案:

答案 0 :(得分:2)

你需要把你的代码放在一个循环中(你可能在你的问题中遗漏了) 请注意:

  1. 尽早完成循环不包括最后一个未完成的Quadrupel(因此限制boost::context::continuation::resume()': /usr/local/include/boost/context/continuation_fcontext.hpp:257: undefined reference to也可以防止越界异常,因为如果只剩下3个项目则无法检查Quadrupel。
  2. 按原样复制数组的剩余部分
  3. 以下示例代码:

    length-3

答案 1 :(得分:0)

使用arr.length。在每个作业中,检查数组的长度是否小于您当前所处的值。

答案 2 :(得分:0)

执行以下操作来处理每个四边形。请注意,我的代码假设您正确定义了arr和arr2;

如果您希望将结果放入新数组arr2

for(int i = 3; i < arr.length; i += 4) // i is pointing at the end of each quadruple, so it will never show an incomplete one
{
    arr2[i-3] = arr[i-2];
    arr2[i-2] = arr[i-1];
    arr2[i-1] = arr[i];
    arr2[i] = arr[i-3];
}

int nbRemainingElements = arr.length % 4;
for(int i = 0; i < nbRemainingElements; ++i)
{
    int index = arr.length - i - 1;
    arr2[index] = arr[index];
}

如果您想在不安装其他阵列的情况下修改arr

for(int i = 3; i < arr.length; i += 4) // i is pointing at the end of each quadruple, so it will never show an incomplete one
{
    T firstQuadElement = arr[i-3];
    arr[i-3] = arr[i-2];
    arr[i-2] = arr[i-1];
    arr[i-1] = arr[i];
    arr[i] = firstQuadElement;
}

顺便说一下,如果你想要两个不同的数组,那么解决方案也可以是使用array.copy复制arr然后应用解决方案2