3 条题解
-
019220448 董文杰 (董文杰) LV 9 @ 2023-05-20 19:04:51
列表做法,时间复杂度为\(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()
-
02019-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]);
} -
02019-10-21 09:54:22@
#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
- 上传者