
要原地修改
暴力解法(数组大会超时)
内层循环会遍历整个数组 n 次,外层循环会执行 k 次
时间复杂度:O(k×n)
没有使用额外的空间,只是在数组操作过程中使用了一个临时变量 temp 来存储当前旋转的元素
空间复杂度是 O(1)
python
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
for i in range(k):
temp = nums[-1]
for j in range(len(nums)-1, 0 ,-1):
nums[j] = nums[j-1]
nums[0] = temp
如果 k 比 n 大,可以考虑将 k 取模 n ,即 k = k % n,这样可以减少不必要的旋转步骤。
只转余数
nums[-k:]:获取数组的最后 k 个元素。
nums[:-k]:获取数组的前 n-k 个元素。
python
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
n = len(nums)
k = k % n # 防止 k 大于 n
# 使用切片方法进行旋转
nums[:] = nums[-k:] + nums[:-k]
k = 0 且 nums 只有一个元素时,使用 nums[:-0] 返回了一个空数组
python
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
n = len(nums)
k = k % n # 防止 k 大于 n
# 使用切片方法进行旋转
if k==0:
nums=nums
else:
nums[:] = nums[-k:] + nums[:(n-k)] # 拼接
k = 0 且 nums 只有一个元素时,
nums[-k:] = [0:]
例如nums = [1], k = 0
- nums[:-k] = nums[:-0] 返回了一个空数组
- nums[:(n-0)] = nums[:1] =num 会返回整个数组,导致输出 [1,1] 预期结果 [1]