Java - 旋转数组

2022-09-04 04:59:53

因此,目标是将数组中的元素旋转正确的时间。例如;如果 ,则将成为aa==2array = {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


答案 1

将模数组长度添加到代码中:

// 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


答案 2

如果您不想重新发明轮子(也许这是一个练习,但很高兴知道),您可以使用.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]