essay

hot100-轮转数组

#算法

hot100——轮转数组

给定一个整数数组 nums,将数组中的元素向右轮转 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]

示例 2:

输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释:
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]

提示:

1 <= nums.length <= 10510^5
-2312^{31} <= nums[i] <= 2312^{31} - 1
0 <= k <= 10510^5

解法

func rotate(nums []int, k int)  {
    n := len(nums)
    k = k%n
    //先反转整个数组
    reverse(nums, 0, n-1)
    //再反转前k个
    reverse(nums, 0, k-1)
    //再反转剩余的
    reverse(nums, k, n-1)
}
 
func reverse(nums []int, left int, right int) {
    for left < right {
        nums[left], nums[right] = nums[right], nums[left]
        left++
        right--
    }
}
comments如果有不同意见或者补充,直接留在这里。
contact

在别处继续找到我

如果你想聊技术、设计,或者只是打个招呼。

暂未配置外部链接