189. 輪轉數組
通過三次反轉操作,可以實現數組的輪轉:
- 反轉整個數組: 將數組完全反轉,使得原數組的后?
k
?個元素移動到數組的前面。- 反轉前?
k
?個元素: 將前?k
?個元素反轉,恢復它們的原始順序。- 反轉后?
n - k
?個元素: 將后?n - k
?個元素反轉,恢復它們的原始順序。
最終,數組?nums
?被向右輪轉了?k
?個位置。
- 時間復雜度: O(n),因為反轉操作的時間復雜度為 O(n)。
- 空間復雜度: O(1),沒有使用額外的空間。
class Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""def reverse(i, j):while i < j:nums[i], nums[j] = nums[j], nums[i]i += 1j -= 1n = len(nums)k %= n # 輪轉 k 次等于輪轉 k % n 次reverse(0, n - 1)reverse(0, k - 1)reverse(k, n - 1)
反思:樹立數組的思想,看到數組元素的,將他們想成一個整體來看,不要只想著他們是一個一個元素