欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > [leetcode刷题]面试经典150题之6轮转数字(简单)

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

2024/10/24 14:20:07 来源:https://blog.csdn.net/m0_63680328/article/details/142469846  浏览:    关键词:[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]

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com