美文网首页
试设计算法得到原数组循环右移 k 次的 结果并分析算法的时间复杂

试设计算法得到原数组循环右移 k 次的 结果并分析算法的时间复杂

作者: 唐僧取经 | 来源:发表于2019-06-25 09:55 被阅读0次

    试设计算法得到原数组循环右移 k 次的 结果并分析算法的时间复杂度。

    1.问题描述

    已知一个长度为 n 的数组和一个正整数 k,并且最多只能使用一个用于 交换数组元素的附加空间单元,试设计算法得到原数组循环右移 k 次的 结果并分析算法的时间复杂度。

    2.解决思路

    根据三步反转法,实现时间复杂度为O(n),空间复杂度为O(1)
    过程:

    • 1、将整体数组进行反转,原顺序1,2,3,4,5,6,7,8,9变为9,8,7,6,5,4,3,2,1
    • 2、将前K-1个数进行反转,比如K=2,则结果为:8,9,7,6,5,4,3,2,1
    • 3、将后K个数进行反转,结果:8,9,1,2,3,4,5,6,7

    3.代码实现

    golang code:

    package main
    
    import "fmt"
    
    func Do(arr []int64, k int) {
        if k > len(arr) {
            fmt.Println("error,k is beyond array length")
        }
    
        // 三步反转法
        Reverse(arr, 0, len(arr)-1)
        Reverse(arr, 0, k-1)
        Reverse(arr, k, len(arr)-1)
    
    }
    func Reverse(arr []int64, start, end int) {
        for start < end {
            arr[start], arr[end] = arr[end], arr[start]
            start++
            end--
        }
    }
    
    func main() {
        arr := []int64{1, 2, 3, 4, 5, 6, 7, 8, 9}
        Do(arr, 5)
        fmt.Println(arr)
    
    }
    
    

    相关文章

      网友评论

          本文标题:试设计算法得到原数组循环右移 k 次的 结果并分析算法的时间复杂

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