189.M 轮转数组
Problem: 189. 轮转数组
思路
首先需要考虑k
大于数组长度的情况,因此需要 mod 数组长度。
步骤:
把数组整体翻转,这样可以把最后的
k
个元素反转到数组前方,其余 len(nums)-k 个元素翻转到数组后方然后会发现前 k 个元素和后 len(nums)-k 个元素的顺序与期望的顺序刚好相反
因此分别对两个子数组 0, k-1 和 k, len(nums)-1 的范围进行翻转。
Code
func rotate(nums []int, k int) {
k %= len(nums)
reverse(nums, 0, len(nums)-1)
reverse(nums, 0, k-1)
reverse(nums, k, len(nums)-1)
}
func reverse(nums []int, left int, right int) {
for left < right {
temp := nums[left]
nums[left] = nums[right]
nums[right] = temp
left++
right--
}
}
Last updated
Was this helpful?