题目地址(189. 轮转数组)
https://leetcode.cn/problems/rotate-array/
题目描述
给你一个数组,将数组中的元素向右轮转 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]
前置知识
公司
- 暂无
思路
- 核心思路:前n-k个元素翻转,后k个元素翻转,然后整个翻转就符合要求
- 这样处理的前提,要把k处理一下,因为当移动n时,又回来了,等于没移动,所以进行取余处理
关键点
代码
- 语言支持:Go
Go Code:
func rotate(nums []int, k int) {
if nums == nil || len(nums) == 1 {
return
}
n := len(nums)
k = k % n
reverse(nums, 0, n - k - 1)
reverse(nums, n - k, n - 1)
reverse(nums, 0, n - 1)
}
func reverse(nums []int, head int, tail int) {
for head < tail {
nums[head], nums[tail] = nums[tail], nums[head]
head++
tail--
}
}
复杂度分析
令 n 为数组长度。
- 时间复杂度:
- 空间复杂度: