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
相关推荐
To_OC7 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode
旖-旎8 小时前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
To_OC8 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
tachibana219 小时前
hot100 数组中的第K个最大元素(215)
java·数据结构·算法·leetcode
晚笙coding21 小时前
LeetCode 98:验证二叉搜索树 —— 从局部判断到全局范围约束的递归思想
算法·leetcode·职场和发展
兰令水1 天前
hot100【acm版】【2026.7.21打卡-java版本】
java·开发语言·算法·leetcode·面试
退休倒计时1 天前
【每日一题】LeetCode 131. 分割回文串 TypeScript
算法·leetcode·typescript
旖-旎2 天前
LeetCode 279:完全平方数(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
良木林2 天前
滑动窗口 - LeetCode hot 100
javascript·算法·leetcode·双指针·滑动窗口
晚笙coding2 天前
LeetCode 108:将有序数组转换为二叉搜索树 —— 从数组到平衡二叉树的递归构造
数据结构·算法·leetcode