java - 我们如何向左旋转数组?

标签 java arrays rotation

例如:我有一个数组 {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/

相关文章:

java - toString 应该用于复杂的操作吗?

java - MediaPlayer 出现错误

c++ - 不能用双指针反转数组

c - 如何从函数返回数组到main()

javascript - Matter.js:计算对象旋转了多少次的方法?

java - 以编程方式创建复合过滤器以在 log4j 2 中定义多个过滤器

c++ - 在 C++ 中检查另一个字符串中的字符串

iPhone UIActionSheet 自动旋转不起作用

opengl - 给定旋转后的法向量,求平面的 OpenGL 旋转矩阵

java正则表达式匹配0-9和一些特殊字符