189. 轮转数组

题目地址(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 为数组长度。

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容