leetcode hot100 189.轮转数组 medium

要原地修改

暴力解法(数组大会超时)

内层循环会遍历整个数组 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]
相关推荐
人道领域1 小时前
【LeetCode刷题日记】654.最大二叉树:递归算法详解
java·算法·leetcode
失去的青春---夕阳下的奔跑13 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
m0_6294947315 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表
吃着火锅x唱着歌17 小时前
LeetCode 1019.链表中的下一个更大节点
算法·leetcode·链表
凌波粒17 小时前
LeetCode--404.左叶子之和(二叉树)
算法·leetcode·职场和发展
绝知此事18 小时前
【算法突围 03】核心算法思想:分治/递归/动态规划与 LeetCode 高频真题解析
算法·leetcode·面试·动态规划
阿Y加油吧19 小时前
两道字符串 DP 模板题复盘:最长公共子序列 & 编辑距离
leetcode
我爱cope19 小时前
【力扣hot100:76. 最小覆盖子串】
算法·leetcode·职场和发展
sheeta199820 小时前
LeetCode 每日一题笔记 日期:2026.05.20 题目:2657. 找到前缀公共数组
笔记·算法·leetcode
吃着火锅x唱着歌20 小时前
LeetCode 962.最大宽度坡
算法·leetcode·职场和发展