题目链接
给定一个整数数组 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]
解题思路
数组翻转
1.初始化定义n(nums数组长度)、k(数组右转k次)
2.定义函数翻转函数,传入参数nums数组、left、right,当前left < right 时
2(1).left所在nums数组索引的值赋值给tmp
2(2).right所在nums数组索引的值赋值给left所在nums数组索引的值,
2(3).tmp赋值给right所在nums数组索引的值
2(4).left的值+1,left的值-1
3.整体翻转
4.数组左边,以索引0开始,索引k-1结束
5.数组右边,以索引k开始,索引n-1结束
3.之前结束值及当前i的结束值取其最大值,重新赋值给end
4.循环遍历结束,将当前起始值及结束值保存至ret数组里
解题代码
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
n = len(nums)
k = k % n
self.reverse(nums, 0, n - 1)
self.reverse(nums, 0, k - 1)
self.reverse(nums, k, n - 1)
def reverse(self, nums: List[int], left: int, right: int) -> None:
while left < right:
tmp = nums[left]
nums[left] = nums[right]
nums[right] = tmp
left += 1
right -= 1