例如:我有一个数组 {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];
}
但是我们怎样才能将数组向左旋转呢?
最佳答案
向左旋转n等同于向右旋转长度-n。
向右旋转(对于正 n):
for(int i = 0; i < data.length; i++){
result[(i+n) % data.length ] = data[i];
}
向左旋转(对于正 n):
for(int i = 0; i < data.length; i++){
result[(i+(data.length-n)) % data.length ] = data[i];
}
这样您就可以避免对负数取模。
如果你想输入一个整数 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;
}
关于java - 我们如何向左旋转数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31128751/