gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:25:50 25 4
gpt4 key购买 nike

因为我正在练习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; 谁能向我解释一下反转方法?

最佳答案

我认为,这个问题是从 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]

另一种方式。

关于java - Java反向数组方法是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43382754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com