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

时间:2017-04-13 02:54:02

标签: 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 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;任何人都可以向我解释相反的方法吗?

2 个答案:

答案 0 :(得分:1)

  

但是我根本不知道这个方法如何反转阵列?

这不是库实现。你必须自己写。 http://www.example.com/forum/forumdisplay.php?f=148&order=desc&page=3可能有帮助。

  

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

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

答案 1 :(得分:0)

我认为,此问题是从leetcode

发布的

将数组的每个元素向右旋转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以防止不必要的多次轮换。

reverse(arr, 0, arr.length - 1);会在[7,6,5,4,3,2,1]中生成数组 reverse(arr, 0, k - 1);会在[5,6,7 ,4,3,2,1] 中生成数组 如你所见,你已经完成了数组中的第一部分 reverse(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]

是另一种方式。