[leetcode刷题]面试经典150题之6轮转数字(简单)

题目

​​​​​​轮转数组

给定一个整数数组 nums,将数组中的元素向右轮转 k个位置,其中 k是非负数。

思路

  • 创建辅助数组

    • 你创建了一个长度和 nums 一样的辅助数组 n,用来存储轮转后的结果。
    • n = [0] * len(nums) 初始化一个全为 0 的新数组 n
  • 处理 k

    • 如果 k 大于数组长度 len(nums),你用 k = k % len(n) 来处理,避免轮转次数超出数组长度。这一步是必要的,因为轮转 len(nums) 次后数组会回到原始状态。
  • 将最后 k 个元素放到辅助数组的开头

    • 通过 n[i] = nums[len(nums) - k + i],你把 nums 中从倒数第 k 个开始的元素存放到辅助数组的前 k 个位置。
  • 将剩余的元素移动到辅助数组的后面

    • 接下来,通过 n[i] = nums[i - k],你把数组剩余的元素移动到辅助数组中。
  • 将辅助数组拷贝回原数组

    • 最后,你通过 nums[i] = n[i] 将辅助数组 n 的值拷贝回 nums 中,完成数组的轮转。

代码

复制代码
class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        n=[0]*len(nums)
        if k>len(n):
            k=k%len(n)
        for i in range(k):
            n[i]=nums[len(nums)-k+i]
        for i in range(k,len(nums)):
            n[i]=nums[i-k]
        for i in range(len(n)):
            nums[i]=n[i]
相关推荐
KyollBM1 分钟前
【CF】Day75——CF (Div. 2) B (数学 + 贪心) + CF 882 (Div. 2) C (01Trie | 区间最大异或和)
c语言·c++·算法
CV点灯大师15 分钟前
C++算法训练营 Day10 栈与队列(1)
c++·redis·算法
GGBondlctrl31 分钟前
【leetcode】递归,回溯思想 + 巧妙解法-解决“N皇后”,以及“解数独”题目
算法·leetcode·n皇后·有效的数独·解数独·映射思想·数学思想
武子康44 分钟前
大数据-276 Spark MLib - 基础介绍 机器学习算法 Bagging和Boosting区别 GBDT梯度提升树
大数据·人工智能·算法·机器学习·语言模型·spark-ml·boosting
武子康1 小时前
大数据-277 Spark MLib - 基础介绍 机器学习算法 Gradient Boosting GBDT算法原理 高效实现
大数据·人工智能·算法·机器学习·ai·spark-ml·boosting
Andrew_Xzw1 小时前
数据结构与算法(快速基础C++版)
开发语言·数据结构·c++·python·深度学习·算法
还有几根头发呀2 小时前
UDP 与 TCP 调用接口的差异:面试高频问题解析与实战总结
网络·网络协议·tcp/ip·面试·udp
超的小宝贝2 小时前
数据结构算法(C语言)
c语言·数据结构·算法
木子.李3478 小时前
排序算法总结(C++)
c++·算法·排序算法