189. 轮转数组

题目描述

思路
基于这道题目当中给出的样例,我们能够观察出实现"轮转数组"操作的规律,那就是首先对整个数组进行翻转,然后以k为界,分别翻转其之前和之后的子数组,得到的结果就是答案。
在 Golang 当中我们可以自己写一个对序列进行翻转的函数。
在 Python 当中我们可以基于序列本身的切片性质快速完成序列指定区间的翻转。
基于以上思路,我们写代码来解决问题。
Golang 题解
go
func reverse(nums []int) []int {
for i, j := 0, len(nums) - 1; i < j; i, j = i + 1, j - 1 {
nums[i], nums[j] = nums[j], nums[i]
}
return nums
}
func rotate(nums []int, k int) {
k %= len(nums)
reverse(nums)
reverse(nums[0: k])
reverse(nums[k:])
}
Python 题解
python
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
k %= len(nums)
nums[:] = nums[::-1]
nums[0: k] = nums[0: k][::-1]
nums[k:] = nums[k:][::-1]