美文网首页
189. 轮转数组

189. 轮转数组

作者: 王侦 | 来源:发表于2022-09-29 22:36 被阅读0次

    题目地址(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)

    相关文章

      网友评论

          本文标题:189. 轮转数组

          本文链接:https://www.haomeiwen.com/subject/tntlartx.html