簡體   English   中英

Java反向數組方法如何工作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM