189. Rotate Array
Topics: Array
Math
Two Pointers
Solution
觀察 Array 在前後的變化,會發現 k 個數字會搬到前面:
k = 3
:[1, 2, 3, 4, 5, 6, 7]
->[5, 6, 7, 1, 2, 3, 4]
想要達到空間複雜度只有 O(1),可以用以下方法:
- Reverse 整個 List,讓後面的數字翻轉到前面。
- Reverse 前面
k
個數字,把前段數字排正。 - Reverse 後面
n - k
個數字,把後段數字排正。
Note: 因為
k
的輸入可能會超過n
,因此在計算的時候需要把k % n
。
Example 1
Input: nums = [1,2,3,4,5,6,7], k = 3
Output: [5,6,7,1,2,3,4]
[1,2,3,4,5,6,7]
->[7,6,5,4,3,2,1]
[7,6,5,4,3,2,1]
->[5,6,7,4,3,2,1]
[5,6,7,4,3,2,1]
->[5,6,7,1,2,3,4]
Implementation
class Solution {
fun rotate(nums: IntArray, k: Int): Unit {
val n = nums.size
nums.reverse(0, n)
nums.reverse(0, k % n)
nums.reverse(k % n, n)
}
}