数组题解——轮转数组【LeetCode】
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)
反思:树立数组的思想,看到数组元素的,将他们想成一个整体来看,不要只想着他们是一个一个元素