Java反向数组方法是如何工作的?
因为我在用java练习基本的数组问题。我有一个关于将n个元素按k单位向左/向右旋转的问题 我知道如何处理小元素数组,比如我有一个数组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
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)写入这个方法吗?我们需要向右旋转。把它看成是数组的镜像。右边的元素自动倾向于左边,反之亦然。