189.M 轮转数组

Problem: 189. 轮转数组

思路

首先需要考虑k大于数组长度的情况,因此需要 mod 数组长度。

步骤:

  1. 把数组整体翻转,这样可以把最后的k个元素反转到数组前方,其余 len(nums)-k 个元素翻转到数组后方

  2. 然后会发现前 k 个元素和后 len(nums)-k 个元素的顺序与期望的顺序刚好相反

  3. 因此分别对两个子数组 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?