题目:
给定一个整数数组 nums,将数组中的元素向右轮转 k **个位置,其中 k **是非负数。
算法:
方法一:额外数组
将nums[i]放到tmp[i + k mod n],最后将tmp copy 到nums
func rotate(nums []int, k int) {
n := len(nums)
tmp := make([]int, n)
for i := 0; i < n; i ++ {
tmp[(i + k ) % n] = nums[i]
}
copy(nums, tmp)
}
方法二:旋转数组
func rotate(nums []int, k int) {
n := len(nums)
//因为k可能大于n
k = k % n
reverse(nums, 0, n - 1)
reverse(nums, 0, k - 1)
reverse(nums, k, n - 1)
}
func reverse(nums []int, i, j int) {
for i < j {
nums[i], nums[j] = nums[j], nums[i]
i ++
j --
}
}