Java反向数组方法是如何工作的?

Java反向数组方法是如何工作的?,java,Java,因为我在用java练习基本的数组问题。我有一个关于将n个元素按k单位向左/向右旋转的问题 我知道如何处理小元素数组,比如我有一个数组int[]arr={1,2,3}我可以像这样切换元素的位置: return new int[]{arr[1],arr[2],arr[0]}; 在此之后,如果我在一个数组中有100个或更多的元素,这种方法根本不起作用。所以我看到有人用相反的方法来处理它 public void rotateProblem(int[]arr,int k){ //k means rota

因为我在用java练习基本的数组问题。我有一个关于将n个元素按k单位向左/向右旋转的问题

我知道如何处理小元素数组,比如我有一个数组
int[]arr={1,2,3}我可以像这样切换元素的位置:

return new int[]{arr[1],arr[2],arr[0]};
在此之后,如果我在一个数组中有100个或更多的元素,这种方法根本不起作用。所以我看到有人用相反的方法来处理它

public void rotateProblem(int[]arr,int k){ //k means rotate k units to right
   k%=arr.length;
   k=2;
   reverse(arr, 0, arr.length - 1);
   reverse(arr, 0, k - 1); 
   reverse(arr, k, arr.length - 1);
}
但是我完全不明白这个方法如何反转数组,为什么我需要使用
k%=arr.length
但我一点也不明白这个方法是如何反转数组的

这不是一个库实现。你得自己写。也许会有帮助

为什么我需要使用k%=arr.length


如果有一个包含100个元素的数组,并且需要将其旋转550个位置,则生成的数组将类似于旋转50个元素后得到的数组。通过将数组旋转100个位置或200个位置,或者通常是k*100个位置,您将得到相同的数组。

我假设,这个问题是从

将数组的每个元素向右旋转k步
例如,对于数组
[1,2,3,4,5,6,7]
k=3
,将旋转到
[5,6,7,1,2,3,4]

注意:您可能有较大的
k
(大于数组中的元素数)。
因此,使用
k=array.length
时,旋转后的数组将等于原始数组。
类似地,
k=array.length+1
相当于
k=1

因此,在第一种情况下,我们做
k=k%arr.length
,以防止不必要的多次旋转


反向(arr,0,arr.length-1)
将导致数组出现在
[7,6,5,4,3,2,1]

反向(arr,0,k-1)
将导致数组出现在
[5,6,7
,4,3,2,1]
正如您所看到的,您已经完成了数组中的第一部分。
反向(arr,k,arr.length-1)
将帮助我们实现阵列的最后一部分。[5,6,7,
1,2,3,4]

总的来说,结果(旋转)数组将是
[5,6,7,1,2,3,4]


实现这一目标有多种方法。比如说,
len=arr.length

reverseArray(nums, len - k, len - 1); // [1,2,3,4,7,6,5]
reverseArray(nums, 0, len - k - 1);   // [4,3,2,1,7,6,5]
reverseArray(nums, 0, len - 1);       // [5,6,7,1,2,3,4]

是另一种方法。

发布
反向
方法。它不是Java内置的不做任何事情,因为你有
k=2然而,我希望这是处理k的大值。非常感谢,但我仍然有一个关于reverse()方法的问题,你知道他们为什么要将(arr,0,arr.length-1)写入这个方法吗?我们需要向右旋转。把它看成是数组的镜像。右边的元素自动倾向于左边,反之亦然。