3 条题解

  • 0

    列表做法,时间复杂度为\(O(nk)\)

    def MoveRight():
        n = int(input())
        nums = [int(it) for it in input().split()]
        k = int(input())
    
        for i in range(k):
            tmp = nums[-1]
            nums.pop()
            nums.insert(0, tmp)
    
        print(*nums)
    
    if __name__ == '__main__':
        MoveRight()
    

    使用双端队列,时间复杂度为\(O(k)\)

    from collections import deque
    
    def MoveRight():
        n = int(input())
        nums = deque([int(it) for it in input().split()])
        k = int(input())
    
        for i in range(k):
            tmp = nums[-1]
            nums.pop()
            nums.appendleft(tmp)
    
        print(*nums)
    
    if __name__ == '__main__':
        MoveRight()
    

    使用双端队列的内置函数rotate,该函数的底层实现就是第二个程序,故时间复杂度也为\(O(k)\)

    from collections import deque
    
    def MoveRight():
        n = int(input())
        nums = deque([int(it) for it in input().split()])
        k = int(input())
    
        nums.rotate(k)
    
        print(*nums)
    
    if __name__ == '__main__':
        MoveRight()
    
  • 0
    @ 2019-11-19 17:04:36

    #include <stdio.h>
    void MoveRight(int a[],int n);
    void Output(int a[],int n);
    int main()
    {
    int a[10000],n,k,i;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    scanf("%d",&k);
    for(i=0;i<k;i++)
    MoveRight(a,n);
    Output(a,n);
    return 0;
    }

    void MoveRight(int a[],int n)
    {
    int i,temp;
    temp=a[n-1];
    for(i=n-2;i>=0;i--)
    a[i+1]=a[i];
    a[0]=temp;
    }
    void Output(int a[],int n)
    {
    int i;
    for(i=0;i<n;i++)
    printf("%d ",a[i]);
    }

  • 0
    #include<iostream>
    using namespace std;
    
    class Array
    {
    private:
        int n;
        int size;
        int *a;
    public:
        Array(int set_n)
        {
            n=set_n;
            size=n*2;
            a=new int[size];
        }
    
        void set_array()
        {
            for(int i=0;i<n;i++)
                cin>>a[i];
        }
    
        void output()
        {
            for(int i=0;i<n;i++)
                cout<<a[i]<<" ";
            cout<<endl;
        }
    
        void move_to_right(int k)
        {
            int tmp=0;
            for(int i=0;i<k;i++)
            {
                tmp=a[n-1];
                for(int i=n-1;i>=1;i--)
                {
                    a[i]=a[i-1];
                }
                a[0]=tmp;
            }
        }
    
    };
    int main()
    {
        int n,k;
        cin>>n;
        Array arr(n);
        arr.set_array();
        //arr.output();
        cin>>k;
        arr.move_to_right(k);
        arr.output();
    
        system("pause");
        return 0;
    }
    
    
  • 1

信息

难度
5
分类
(无)
标签
递交数
1200
已通过
402
通过率
34%
被复制
10
上传者