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)
但是我们怎样才能将数组向左旋转?
向左旋转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)
如果向左旋转,您可以使用它来避免负数的模数:
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)