Java - 旋转数组

新手上路,请多包涵

所以目标是将数组中的元素向右旋转 a 次。举个例子;如果 a==2 ,则 array = {0,1,2,3,4} 将变为 array = {3,4,0,1,2}

这是我所拥有的:

 for (int x = 0; x <= array.length-1; x++){
    array[x+a] = array[x];
}

但是,这无法说明何时 [x+a] 大于数组的长度。我读到我应该将更大的数组存储在不同的数组中,但看到 a 是可变的我不确定这是最好的解决方案。提前致谢。

原文由 user3476154 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 466
2 个回答

在您的代码中添加模数数组长度:

 // create a newArray before of the same size as array

// copy
for(int x = 0; x <= array.length-1; x++){
  newArray[(x+a) % array.length ] = array[x];
}

您还应该创建一个新的 Array 复制到,这样您就不会覆盖稍后需要的值。

原文由 Sirko 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您不想重新发明轮子(也许这是一个练习,但知道它可能会很好),您可以使用 Collections.rotate

请注意,它需要一个对象数组,而不是原始数据类型(否则您将在列表中交换数组本身)。

 Integer[] arr = {0,1,2,3,4};
Collections.rotate(Arrays.asList(arr), 2);
System.out.println(Arrays.toString(arr)); //[3, 4, 0, 1, 2]

原文由 user2336315 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏