[英]How does the Java reverse array method works?
由於我正在用Java練習基本數組問題。 我有一個關於將k個單位向左/右旋轉n個元素的問題。
我知道如何處理小元素數組,例如我有一個數組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個位置,您將獲得相同的數組。
我想這個問題是從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
5,6,7,4,3,2,1]中的數組
如您所見,您已經完成了數組的第一部分。
reverse(arr, k, arr.length - 1);
將幫助我們實現陣列的最后一部分。 [5,6,7,1,2,3,4 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]
是另一種方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.