我们怎样才能将数组向左旋转?

Khu*_*ong 5 java arrays rotation

EX:我有一个数组{1, 2, 3, 4, 5}和一个整数7 它会7向右旋转空格,如:{4, 5, 1, 2, 3}

我也有那个数组{1, 2, 3, 4, 5}和一个整数-7 它会7向左旋转空格,如:{3, 4, 5, 1, 2}

我使用以下方法将数组向右旋转:

for(int i = 0; i < data.length; i++){
              result[(i+n) % data.length ] = data[i];
            }
Run Code Online (Sandbox Code Playgroud)

但是我们怎样才能将数组向左旋转?

sam*_*gak 8

向左旋转n与向右旋转长度为n相同.

向右旋转(正n):

for(int i = 0; i < data.length; i++){
    result[(i+n) % data.length ] = data[i];
}
Run Code Online (Sandbox Code Playgroud)

向左旋转(正n):

for(int i = 0; i < data.length; i++){
    result[(i+(data.length-n)) % data.length ] = data[i];
}
Run Code Online (Sandbox Code Playgroud)

这样您就可以避免使用负数的模数.

如果你想输入一个整数n,如果n为正,则向右旋转;如果n为负,则输入左,你可以这样做:

 int[] rotateArray(int n, int[] data)
 {
      if(n < 0) // rotating left?
      {
          n = -n % data.length; // convert to +ve number specifying how 
                                // many positions left to rotate & mod
          n = data.length - n;  // rotate left by n = rotate right by length - n
      }
      int[] result = new int[data.length];
      for(int i = 0; i < data.length; i++){
          result[(i+n) % data.length ] = data[i];
      }
      return result;
 }
Run Code Online (Sandbox Code Playgroud)


cod*_*guy 5

如果向左旋转,您可以使用它来避免负数的模数:

int[] data = {1, 2, 3, 4, 5};
int[] result = new int[data.length];
for (int i = 0; i < data.length; i++) {
    result[(i + (data.length - 2)) % data.length] = data[i];
}

for (int i : result) {
    System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)