1 题目
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
示例 1:
输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右轮转 1 步: [7,1,2,3,4,5,6]
向右轮转 2 步: [6,7,1,2,3,4,5]
向右轮转 3 步: [5,6,7,1,2,3,4]
示例 2:
输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释:
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]
2 分析
观察原始数组nums,和将元素向左轮转k个位置之后的数组,可以发现通过以下三步可以实现:
- 首先反转整个数组;
- 然后反转前k个元素
- 最后反转剩下的部分
但是同时需要关注k>n的情况,可以通过k=k%n来解决。
因此,问题就变为了如何快速、原地翻转数组。
首先,python有自带的reversed函数,写起来会非常简单。
defrotate(self,nums,k):n=len(nums)ifk>n:k=k%n nums.reverse()nums[